2014-04-11 92 views
0

我们有一个要求,我们必须从数据库获取一个xlsx文件并向其中添加4张表。XSSFWorkbook内存问题

我已经写了下面的代码来完成相同的。

代码:

OPCPackage opcPackage=OPCPackage.open(tempExcelFile); 
XSSFWorkbook xworkbook=new XSSFWorkbook(opcPackage);  
SXSSFWorkbook dbWorkBook = new SXSSFWorkbook(xworkbook, ApplicationConstants.FLUSH_LIMIT); 
    // add sheets to dbworkBook 

现在Excel文件的数据库大小为10MB左右,我在

XSSFWorkbook xworkbook=new XSSFWorkbook(opcPackage);  

收到一个OOM例外我的内存设置-Xms512m -Xmx1024m和我不能改变这个号码。我已经看到了一些解决方案,其中事件API has been asked to be used to solve the memory issue

我的问题是即使我使用事件api读取行,我如何将它重新写入SXSSFWorkbook对象,以便我可以添加4张表。

+0

你应该发布你的mem out stacktrace。异常 –

+0

堆栈跟踪如下: – user3487820

回答

0

你与生俱来这里的问题是,你是用的内存非常小的量非常大的Excel文档工作。我一直在解析xlsx文档,他们可以花费大量的内存来解析。我希望一个10 MB的xlsx文件在内存中解压缩时需要1.5-2.5GB内存的大小。

你对与XLSX格式的根本问题跑起来(其中,如果你不知道,基本上只是一堆压缩XML文档)。除非你有很多值得玩的内存,否则我真的不能建议打开一个xlsx文件> 2 MB。