……天天向上

          好的想法總是無(wú)窮無(wú)盡

          統(tǒng)計(jì)

          留言簿(1)

          閱讀排行榜

          評(píng)論排行榜

          使用jxl導(dǎo)出大數(shù)據(jù)量EXCEL時(shí)內(nèi)存溢出的解決辦法

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


          2、EXCEL獲取的list集合先讀取數(shù)據(jù)總行數(shù),再通過(guò)ROWNUM進(jìn)行控制,設(shè)定每次讀取多少行數(shù)據(jù),比如一個(gè)List設(shè)定為50000;
                      WorkbookSettings wbSetting = new WorkbookSettings();   
                      wbSetting.setUseTemporaryFileDuringWrite(true);   
                      wbSetting.setTemporaryFileDuringWriteDirectory(new File(excelPath));//臨時(shí)文件夾的位置
                      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);// 獲取總行數(shù)
                          pager.setNewTotalPages(pager.getTotalRows()); // 總頁(yè)數(shù)
                          for (int i = 1; i 
          <= pager.getTotalPages(); i++) {
                              pager.setCurrentPage(i); // 當(dāng)前頁(yè)面d
                              List<BrasAuth
          > list = BrasDatabase
                                      .getBrasAuthResultByIpToExcelList(pager
                                              .getStartTime(), pager.getEndTime(), pager);
                              this.createExcel(list,excelFilePath);
                              list.clear();
                          }
                      }



          3、在寫入EXCEL的時(shí)候,將讀取的LIST分割,每50000條數(shù)據(jù)生成一個(gè)EXCEL的sheet(一個(gè)sheet最多能存儲(chǔ)60000多行數(shù)據(jù)),再寫入,寫入的時(shí)候,如果設(shè)置了采用臨時(shí)文件寫入的話,jx1會(huì)自動(dòng)采用生成臨時(shí)文件的方式寫入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) 評(píng)論(1)  編輯  收藏 所屬分類: Java

          評(píng)論

          # re: 使用jxl導(dǎo)出大數(shù)據(jù)量EXCEL時(shí)內(nèi)存溢出的解決辦法 2015-08-04 20:04 林秀東

          開啟寫臨時(shí)文件功能不懂用,我的報(bào):系統(tǒng)找不到指定路勁,路徑我檢查過(guò)了的,請(qǐng)問(wèn)樓主還有更加詳細(xì)的代碼嗎?謝謝  回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 铁岭县| 乌兰浩特市| 民乐县| 盐池县| 杭锦旗| 松原市| 舞阳县| 兴仁县| 鹤岗市| 秭归县| 屏山县| 眉山市| 乌什县| 连南| 长子县| 新绛县| 五寨县| 彩票| 民丰县| 西安市| 高州市| 苏尼特左旗| 若羌县| 夹江县| 交城县| 临颍县| 和田市| 齐河县| 石渠县| 和林格尔县| 黔西县| 出国| 明光市| 巴塘县| 体育| 沛县| 高安市| 阳信县| 龙门县| 永州市| 衡阳市|