我有一个大小为20MB的excel文件。我想在此文件中添加一个新工作表。我正在使用Apache POI。但是当我加载工作簿时,我在下面一行得到堆内存异常:
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File(fileName)));
我试过寻找替代方案,但是每个人都建议增加我的堆内存,但我不能在服务器端执行此操作。请帮帮我!
还有一件事!是否可以通过opcpackage在现有excel文件中创建新工作表。如果是,怎么样?
以下是供您参考的代码:
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();
}
}
我收到以下异常:
java.lang.OutOfMemoryError: Java heap space
在线:
XSSFWorkbook wb = new XSSFWorkbook(pkg);
三江源!
答案 0 :(得分:1)
如果内容不是太复杂,您可以使用streaming-input功能,并以流输出方式构建带有该数据的新SXSSFWorkbook,因此无需将完整的工作簿保存在内存中。
还有更多elaborate example显示了如何以流媒体方式完成阅读信息。
如果在源文档中应用了大量样式/格式,这自然会很复杂。