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的使用例子如下:
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
相关文章推荐
- 【Xamarin挖墙脚系列:开始使用Xamari4.0系列产品开发IOS】
- iPhone/iPad/Android UI尺寸规范
- UVA 10954 Add All 全部相加 Huffman编码 双队列解
- mysql语句优化
- 7. JPA @Column 控制浮点数精度
- HTML5 developer‘s cookbook 学习笔记(新的结构元素)
- Python中的数据对象持久化存储模块pickle的使用示例
- *等式变换
- android鼠标事件
- 神秘的subsys_initcall
- android: SharedPreferences存储
- 深入理解FFM原理与实践
- TP:DD4FAE06 Thanks for TexturePacker
- CSS3 Animation
- js 时间操作
- Ubuntu下idea不能输入中文
- Android 设计模式之三:Android设计模式系列链接
- 赶集mysql军规
- Spring Data JPA基本知识
- 如何在Ubuntu系统下使用扫描仪(by quqi99)