我们有一个要求,我们必须从数据库中获取xlsx文件,然后再添加4张表。
我已经编写了以下代码来完成同样的工作。
代码:
OPCPackage opcPackage=OPCPackage.open(tempExcelFile);
XSSFWorkbook xworkbook=new XSSFWorkbook(opcPackage);
SXSSFWorkbook dbWorkBook = new SXSSFWorkbook(xworkbook, ApplicationConstants.FLUSH_LIMIT);
// add sheets to dbworkBook
现在数据库中excel文件的大小约为10Mb,我在
获得了一个OOM异常XSSFWorkbook xworkbook=new XSSFWorkbook(opcPackage);
我的内存设置为-Xms512m -Xmx1024m
,我无法更改此号码。我见过一些事件API has been asked to be used to solve the memory issue
我的问题是,即使我使用事件api读取行,如何将其写回SXSSFWorkbook
对象,以便我可以再添加4张表。
答案 0 :(得分:0)
这里你固有的问题是你正在使用非常大的excel文档,只需要很少的内存。我曾经解析xlsx文档一段时间,他们可以占用大量的内存来解析。我希望在内存中解压缩时,一个10 MB的xlsx文件需要在1.5-2.5 GB内存中占据一席之地。
您正在遇到xlsx格式的基本问题(如果您不知道,基本上只是一堆压缩的XML文档)。除非你有很多值得记忆的游戏,否则我真的不能建议尝试打开xlsx文件> 2 MB。