……天天向上

          好的想法總是無窮無盡

          統計

          留言簿(1)

          閱讀排行榜

          評論排行榜

          使用jxl導出大數據量EXCEL時內存溢出的解決辦法

          1、通過jx1最新版本的采用臨時文件寫入EXCEL功能,設定臨時文件的位置,可以有效的避免內存溢出:
                      wbSetting.setUseTemporaryFileDuringWrite(true);   
                      wbSetting.setTemporaryFileDuringWriteDirectory(new File(excelPath));//臨時文件夾的位置


          2、EXCEL獲取的list集合先讀取數據總行數,再通過ROWNUM進行控制,設定每次讀取多少行數據,比如一個List設定為50000;
                      WorkbookSettings wbSetting = new WorkbookSettings();   
                      wbSetting.setUseTemporaryFileDuringWrite(true);   
                      wbSetting.setTemporaryFileDuringWriteDirectory(new File(excelPath));//臨時文件夾的位置
                      workbook = Workbook.createWorkbook(new File(fullPath),wbSetting);
                      int returnCount=0;
                      if(null!=pager)
                      {
                          returnCount = BrasDatabase.getReturnCount(pager.getStartTime(),
                                  pager.getEndTime(), pager);
                      }

                      if (returnCount > 0) {    
                          pager.setPageSize(50000);
                          pager.setTotalRows(returnCount);// 獲取總行數
                          pager.setNewTotalPages(pager.getTotalRows()); // 總頁數
                          for (int i = 1; i 
          <= pager.getTotalPages(); i++) {
                              pager.setCurrentPage(i); // 當前頁面d
                              List<BrasAuth
          > list = BrasDatabase
                                      .getBrasAuthResultByIpToExcelList(pager
                                              .getStartTime(), pager.getEndTime(), pager);
                              this.createExcel(list,excelFilePath);
                              list.clear();
                          }
                      }



          3、在寫入EXCEL的時候,將讀取的LIST分割,每50000條數據生成一個EXCEL的sheet(一個sheet最多能存儲60000多行數據),再寫入,寫入的時候,如果設置了采用臨時文件寫入的話,jx1會自動采用生成臨時文件的方式寫入EXCEL:
                  for(int i=1;i<=list.size();i++)
                  {
                      if(i%50000
          ==0)
                      
          {
                          sheetName
          =format.format(new Date());
                          toExcel(list.subList(reNum, i),sheetName);
                          reNum
          =i;
                      
          }
                  }

          posted on 2012-07-16 11:48 japper 閱讀(8908) 評論(1)  編輯  收藏 所屬分類: Java

          評論

          # re: 使用jxl導出大數據量EXCEL時內存溢出的解決辦法 2015-08-04 20:04 林秀東

          開啟寫臨時文件功能不懂用,我的報:系統找不到指定路勁,路徑我檢查過了的,請問樓主還有更加詳細的代碼嗎?謝謝  回復  更多評論   

          主站蜘蛛池模板: 海南省| 明溪县| 甘洛县| 庆阳市| 海口市| 顺义区| 弋阳县| 宝鸡市| 睢宁县| 桦南县| 尤溪县| 同江市| 龙江县| 武邑县| 聂荣县| 青川县| 南丰县| 历史| 观塘区| 夏河县| 雷州市| 宁晋县| 韶关市| 黑龙江省| 大宁县| 新丰县| 手游| 永丰县| 靖边县| 迁西县| 陆丰市| 克什克腾旗| 祁连县| 巴林右旗| 新田县| 醴陵市| 尖扎县| 堆龙德庆县| 涞水县| 华亭县| 专栏|