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

时间:2016-08-22 10:30:38

标签: java excel apache-poi

我有一个大小为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);

三江源!

1 个答案:

答案 0 :(得分:1)

如果内容不是太复杂,您可以使用streaming-input功能,并以流输出方式构建带有该数据的新SXSSFWorkbook,因此无需将完整的工作簿保存在内存中。

还有更多elaborate example显示了如何以流媒体方式完成阅读信息。

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