当前位置: 首页 > 常见问题 > Excel表格

xssfworkbook读取内存溢出,xssfworkbook读取excel内存溢出

  • Excel表格
  • 2023-08-06

xssfworkbook读取内存溢出?默认使用poi提供方法XssfWorkBook进行写入Excel。分页查询数据,每次查询完之后,写入到Excel。在写入数据10W+的时候,用时2分钟左右;但10W+之后,速度开始慢了下,导出20W数据大约需要30分钟左右;多次导出之后,那么,xssfworkbook读取内存溢出?一起来了解一下吧。

导出excel内存溢出

导致内存溢出是因为太多了内存不够用,你可以先腔念读一部分然后做个标记,先把读到的这部分数据写入到数据库里。然后再从标记处开始读一部分再写入,再读再写直到完。伍祥困不宴碰要一次性全部读完。

searchfilterhost 运行占用cpu

Workbook workbook = new SXSSFWorkbook(1000);

poi有个机制 每滚肆次往内存枣虚中写1000条数据,大岩轿这个1000你可以改的尽量别大于10000条数据,写完1000条数据后再重新写,这样就不会内存溢出了。

xssfworkbook读取excel内存溢出

The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with OOXML (Office Open XML) Documents. You need to call a different part of POI to process this data (eg HSSF instead of XSSF)

发现这个文件的念坦格式不是标准的excel文件(.xls或者.xlsx),

调用后报上面消宏异常

XSSFWorkbook 读取文件转化成HXSSFWorkbook就可以读取文件

上面的依赖解析表格自己定义解析 比较灵活,但仔桥桐是自己写的内容太多

cn.afterturn

easypoi-spring-boot-starter

4.4.0

sxssfworkbook用法

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();

}

sqlserver占用内存过大

三万行的excel文件 算比橡宽较大的呢。

注意代码优化,尽量避免减少对象重复创建这些,看你的描述是生成梁漏亮成功后内存没有下降

可能是虚拟机在进行垃圾回收处理...

poi有提供大数据Excel生成,,目前还在研究中,可以一起讨搜塌论

以上就是xssfworkbook读取内存溢出的全部内容,关于内存溢出,注意以下几点:1,分页分批从数据库里查询数据。2,注意变量的释放,特别是LIST和MAP之类的引用,如果定义成全局变量或静态变量就会很难释放。3,调大虚拟机内存大小。

猜你喜欢