天天看點

Java使用POI導出大資料量Excel

背景

今天需要寫一個導出的Excel的功能,但是發現當資料量到3萬條時,列數在23列時,記憶體溢出,CPU使用100%,測試環境直接炸掉。在本地測試時發現,導出3000條左右的資料的時候,堆記憶體瞬間升高500M左右。然後發現了SXSSFWorkbook這個類。

簡介

使用方式

= null;
      OutputStream outputStream = null;
      try {
        outputStream = response.getOutputStream();
        //建立工作簿
        workbook = new SXSSFWorkbook();
        // 打開壓縮功能 防止占用過多磁盤
        workbook.setCompressTempFiles(true);

        // 建立一個工作表
        Sheet sheet = workbook.createSheet("表名");
        // 建立一行
        Row titleRow = sheet.createRow(0);
        // 建立一個單元格
        Cell cell = titleRow.createCell(0);
        // 給單元格指派
        cell.setCellValue("内容");

        // 将工作簿寫入輸出流
        workbook.write(outputStream);
      } catch (Exception e) {
        e.printStackTrace();
      }finally {
        if (workbook != null) {
          //使用完畢後将産生的臨時檔案删除 防止将磁盤搞滿
          workbook.dispose();
        }
        if (outputStream != null) {
          outputStream.close();  
        }
      }      

注意點

  • 最好開啟壓縮模式 workbook.setCompressTempFiles(true),這樣可以使得臨時檔案體積大幅減少。
  • 使用完畢後釋放 workbook.dispose(); 防止臨時檔案一直增加 撐爆硬碟。
  • 可以參考easyexcel解決方案。