java用POI導出Excel


  架構SSM + Maven

一、添加依賴:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.11</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.11</version>
</dependency>

二、controller層導出:

(1)HSSFWorkbook工具類(導出.xls格式文件)

    HSSFWorkbook對象,最多支持65535行,適用一般數據量少導出

    @RequestMapping(value = "/exportExcel")
    public void exportallCusTNList(HttpServletRequest request,HttpServletResponse response) {
        String clSchWorkID = request.getParameter("clSchWorkID");
        // 創建excel
        Workbook wb = new HSSFWorkbook();
        try {
            List<Cllog> cllogList = cllogService.getCusTNListBySchWorkId(clSchWorkID);

            // 創建一張工作表
            HSSFSheet sheet = wb.createSheet("sheet1");
            // 設置單元格寬度
            sheet.setColumnWidth(0, "列名".getBytes().length*2*256);
            sheet.setColumnWidth(1, "列名".getBytes().length*2*256);
            // 創建第一行
            HSSFRow row = sheet.createRow(0);
            // 創建第一行的列並向單元格寫值
            HSSFCell cell = row.createCell(0);
            cell.setCellValue("序列號");
            cell = row.createCell(1);
            cell.setCellValue("手機型號");

            // 寫入數據
            for (short i=0;i<cllogList.size();i++)
            {
                row = sheet.createRow(i+1);
                row.createCell(0).setCellValue(String.valueOf(i+1));
                row.createCell(1).setCellValue(cllogList.get(i).getClCustn());
            }
            // 文件名
            String fileName = "序列號" + clSchWorkID + "手機清單.xls";
            // 解決文件亂碼
            final String userAgent = request.getHeader("user-agent");
            if (userAgent != null && userAgent.indexOf("Firefox") >= 0) {
                fileName = new String(fileName.getBytes(), "ISO8859-1");
            } else {
                fileName = URLEncoder.encode(fileName, "UTF8");
            }
            // 下載文件
            response.setContentType("application/octet-stream");
            response.setHeader("Content-disposition", "attachment;filename="+fileName);
            response.flushBuffer();
            wb.write(response.getOutputStream());
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(wb != null) {
                try {
                    wb.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

 如果用HSSFWorkbook對象創建xlsx對象,用WPS可以打開,但是用office打開會出現如下錯誤:

 

 

(2)SXSSFWorkbook工具類(導出.xlsx格式文件,適用於數據量大的文件導出)

        SXSSFWorkbook對象,只支持.xlsx格式。它就是用來解決大數據量以及超大數據量的導入導出操作的,單個sheet表就支持近104萬條數據了。要是導出104萬以上的數據,這時我們必須拆分到多個工作表來實現  

        // 只添加跟HSSFWorkBook不一樣的代碼
        // 創建excel       
        Workbook wb = new SXSSFWorkbook()        
        // 創建一張工作表
        Sheet sheet = wb.createSheet("sheet1");
        // 設置單元格寬度
       sheet.setColumnWidth(0, "列名".getBytes().length*2*256);
       sheet.setColumnWidth(1, "列名".getBytes().length*2*256);
        // 創建第一行
        Row row = sheet.createRow(0);
        // 創建第一行的列並向單元格寫值
        Cell cell = row.createCell(0);
    
       // 文件名
        String fileName = "序列號" + clSchWorkID + "手機清單.xlsx";

 

 

 

 

參考文章:https://www.cnblogs.com/Big-Boss/p/10002739.html

參考文章:https://blog.csdn.net/a602049511/article/details/52367563/

——與君共勉

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM