【问题标题】:Reading template xlsm and writing large data to existing worksheet using SXSSF (POI)使用 SXSSF (POI) 读取模板 xlsm 并将大数据写入现有工作表
【发布时间】:2013-10-23 07:28:23
【问题描述】:

我能够使用 XSSF 读取现有 xlsm 并使用 SXSSF 将数据写入工作表。最后使用 Outputstream 将其作为另一个 xlsm 输出。
SXSSF 因在文档中编写 xlsx 而被提及
对于大数据读取和写入 xlsm 是否正确,否则如果通过此解决方案完成文件将被损坏?
这是有效的示例代码,

public static void main(String[] args) throws Throwable {

    OPCPackage pkg = OPCPackage.open(new File("sample.xlsm"));
        XSSFWorkbook wb_template;
        wb_template = new XSSFWorkbook(
            pkg
        );
        System.out.println("package loaded");
    SXSSFWorkbook wb = new SXSSFWorkbook(wb_template); 
    wb.setCompressTempFiles(true);

    SXSSFSheet sh = (SXSSFSheet) wb.createSheet();
    sh.setRandomAccessWindowSize(100);// keep 100 rows in memory, exceeding rows will be flushed to disk
    for(int rownum = 4; rownum < 5000; rownum++){
       Row row = sh.createRow(rownum);
       for(int cellnum = 0; cellnum < 10; cellnum++){
        Cell cell = row.createCell(cellnum);
        String address = new CellReference(cell).formatAsString();
        cell.setCellValue(address);
       }

    }
    FileOutputStream out = new FileOutputStream(new File("C:\\ouput\\new_file.xlsm"));
    wb.write(out);
    out.close();  }

【问题讨论】:

  • SXSSF 仅用于非常大的文件。如果您的代码可以使用 XSSF 加载,为什么不继续使用它呢?
  • @Gagravarr:我将它作为 Web 应用程序进行了尝试,并为并发用户获取了堆转储。还有其他方法可以加载工作簿然后使用 sxssf 吗?

标签: java excel apache-poi xlsx xlsm


【解决方案1】:

我认为您当前的代码没有太大问题,但是在 apache website 上它说 SXSSF 会在您的计算机上留下临时文件,并且您必须调用 dispose 如下:

Note that SXSSF allocates temporary files that you must always clean up explicitly, by calling the dispose method.
SXSSFWorkbook wb = new SXSSFWorkbook(100);
// dispose of temporary files backing this workbook on disk
wb.dispose();

我建议执行 dispose,因为它似乎可以防止存储剩余信息。关于这是否是正确的方法,我建议获取一个测试文件并试一试,这段代码的执行情况将受到您的系统(cpu 功率、内存等)和文档大小的影响。处理。

祝你好运!

【讨论】:

  • 我明白了你的意思,.. 将在我的代码中添加 dispose,.. 对于大数据的 xlsm 是否有任何其他方法(因为 XSSF 导致堆大小问题).. 实际上我需要添加通过 xlsm 输出大量数据并输出.. 这种方法需要时间和 CPU 进程
  • 我知道如果你从命令行运行程序,你可以向它添加更多的堆空间,除此之外它可能只是导致缓慢的数据大小,如果你有一个巨大的量,那么可能无法绕过一定的处理时间。不幸的是,我从来没有用 Excel 和大量数据做过任何事情,所以我不知道“最好”的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多