700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > POI导出数据内存溢出问题

POI导出数据内存溢出问题

时间:2020-12-13 18:24:04

相关推荐

POI导出数据内存溢出问题

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

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

import junit.framework.Assert;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.ss.util.CellReference;

import org.apache.poi.xssf.streaming.SXSSFWorkbook;

public static void main(String[] args) throws Throwable {

Workbook wb = new SXSSFWorkbook(100); // keep 100 rows in memory, exceeding rows will be flushed to disk

Sheet sh = wb.createSheet();

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

Row row = sh.createRow(rownum);

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

Cell cell = row.createCell(cellnum);

String address = new CellReference(cell).formatAsString();

cell.setCellValue(address); }

}

FileOutputStream out = new FileOutputStream("/temp/sxssf.xlsx");

wb.write(out);

out.close();

}

以上是转载的

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

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

SXSSFWorkbook(XSSFWorkbook workbook)Construct a workbook from a template.

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

/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。