您的位置:首页 > 其它

POI导出数据内存溢出问题

2016-03-03 14:20 375 查看
POI之前的版本不支持大数据量处理,如果数据过多则经常报OOM错误,有时候调整JVM大小效果也不是太好。3.8版本的POI新出来了SXSSFWorkbook,可以支持大数据量的操作,只是SXSSFWorkbook只支持.xlsx格式,不支持.xls格式。

3.8版本的POI对excel的导出操作,一般只使用HSSFWorkbook以及SXSSFWorkbook,HSSFWorkbook用来处理较少的数据量,SXSSFWorkbook用来处理大数据量以及超大数据量的导出。
HSSFWorkbook的使用方法和之前的版本的使用方法一致,这里就不在陈述使用方法了
SXSSFWorkbook的使用例子如下:
importjunit.framework.Assert;

importorg.apache.poi.ss.usermodel.Cell;

importorg.apache.poi.ss.usermodel.Row;

importorg.apache.poi.ss.usermodel.Sheet;

importorg.apache.poi.ss.usermodel.Workbook;

importorg.apache.poi.ss.util.CellReference;

importorg.apache.poi.xssf.streaming.SXSSFWorkbook;

publicstaticvoidmain(String[]args)throwsThrowable{

Workbookwb=newSXSSFWorkbook(100);//keep100rowsinmemory,exceedingrowswillbeflushedtodisk

Sheetsh=wb.createSheet();

for(intrownum=0;rownum<100000;rownum++){

Rowrow=sh.createRow(rownum);

for(intcellnum=0;cellnum<10;cellnum++){

Cellcell=row.createCell(cellnum);

Stringaddress=newCellReference(cell).formatAsString();

cell.setCellValue(address);}

}

FileOutputStreamout=newFileOutputStream("/temp/sxssf.xlsx");

wb.write(out);

out.close();

}


以上是转载的


值得注意的是SXSSFWorkbook只能写不能读。但是往往我们需要向一个Excel模版里导出数据,这样才更好提前定义里面的格式和vba代码。

这里就需要使用SXSSFWorkbook的另外一个构造函数:

SXSSFWorkbook(XSSFWorkbookworkbook)
Constructaworkbookfromatemplate.


通过XSSFWorkbook来读取模版,然后用SXSSFWorkbook来设置样式和写数据,详细使用就参考API吧。


http://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: