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

标签 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);

谢谢!

最佳答案

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

还有更多elaborate example这展示了如何以流媒体方式读取信息。

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

关于java - 如何使用java将工作表添加到现有的大型Excel文件(20MB)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39077210/

相关文章:

java - 在 XWPFDocument 的任意位置插入 XWPFParagraph

java - 如何通过java从Excel文件中删除空白列?

java - 使用多个 getter 时使用 Try-Catch 而不是空检查

java - 当前值/单元格 POI 的 Excel 公式

java - 从数据库中删除记录的 Controller 方法应采用哪些参数?

ios - iPad 应用程序作为 Excel 模型的包装器

使用动态文件名保存到 SharePoint 的 VBA 宏

javascript - 将 Excel BLOB 转换为 javascript 数组

java - 组件必须有一个有效的对等体 - BufferStrategy

java - DeepLearning4j k-均值非常慢