使用Apache POI更新.XLSM文件

时间:2017-11-21 06:30:02

标签: java apache-poi xlsm

我正在尝试使用Apache POI更新现有的.XLSM文件。每次运行我的代码时,都会收到错误,如下所示。

Exception in thread "main" java.lang.IllegalArgumentException: Attempting to write a row[1] in the range [0,9] that is already written to disk.
at org.apache.poi.xssf.streaming.SXSSFSheet.createRow(SXSSFSheet.java:136)
at com.log.test.Test.main(Test.java:41)

基本上我想使用支持宏的excel文件作为标准模板,使用java代码我想制作模板的副本并更新一些工作表的列数据并保存文件。

我正在尝试以下示例代码:

    OPCPackage pkg = OPCPackage.open(new File("C:/LogTest/testme.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.getSheet("Asset Names");
    sh.setRandomAccessWindowSize(100);
    for (int rownum = 1; rownum < 10; rownum++) {

        Row row = sh.createRow(rownum);
        for (int cellnum = 0; cellnum < 2; cellnum++) {

            Cell cell = row.createCell(cellnum);
            String address = new CellReference(cell).formatAsString();
            cell.setCellValue("hello");
        }

    }
    FileOutputStream out = new FileOutputStream(new File("C:/output/new.xlsm"));
    wb.write(out);

    out.close();
    wb.dispose();

System.out.println("Done !!!");  

可以使用Apache POI实现吗?或者我需要使用其他一些库?

sample template

0 个答案:

没有答案