我有一个大小为 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);
谢谢!
最佳答案
如果内容不太复杂可以使用streaming-input功能并以流输出方式使用该数据构造一个新的 SXSSFWorkbook,因此不需要将完整的工作簿保存在内存中。
还有更多elaborate example这展示了如何以流媒体方式读取信息。
如果源文档中应用了大量样式/格式,那么这自然会很复杂。
关于java - 如何使用java将工作表添加到现有的大型Excel文件(20MB)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39077210/