使用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;
}
}



2、EXCEL獲取的list集合先讀取數(shù)據(jù)總行數(shù),再通過(guò)ROWNUM進(jìn)行控制,設(shè)定每次讀取多少行數(shù)據(jù),比如一個(gè)List設(shè)定為50000;
























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:









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