如何使用java将工作表添加到现有的大型excel文件(20MB)?

我有一个大小为20MB的excel文件。 我想添加一个新的表格到这个文件。 我正在使用Apache POI。 但是,当我加载工作簿时,我在下面的行得到堆内存exception:

XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File(fileName))); 

我试图寻找替代scheme,但每个人都build议增加我的堆内存,但我不能在服务器端做到这一点。 请帮帮我!

还有一件事! 是否有可能通过opcpackage在现有的excel文件中创build一个新的工作表。 如果是的话,怎么样?

以下是供您参考的代码:

 public static void main(String[] args) { try { OPCPackage pkg = OPCPackage.open(new File("fileName.xls")); XSSFWorkbook wb = new XSSFWorkbook(pkg); System.out.println("Number of sheets: " + wb.getNumberOfSheets()); pkg.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvalidFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

我得到以下exception:

 java.lang.OutOfMemoryError: Java heap space 

在线:

 XSSFWorkbook wb = new XSSFWorkbook(pkg); 

谢谢!

如果内容不是太复杂,那么可以使用stream式inputfunction,并以stream式输出方式构build带有该数据的新SXSSFWorkbook,从而不需要将完整的工作簿保存在内存中。

还有一个更复杂的例子 ,说明如何以stream媒体的方式完成阅读信息。

自然,如果在源文档中应用了大量的样式/格式,这将会变得复杂。