8

我已经编写了用于编写 xlsm(Excel 2007)的 java 文件。

使用 Apache POI 库,编写 xlsx 文件是成功的。并且写入 xlsm 文件是成功的。但是由于打开xlsm文件时出错,我无法打开xlsm文件。

使用 Apache POI 库编写 xlsm 文件是否可行?

如果编写 xlsm 可行,请提供指南如何使用 Apache poi 库编写 xlsm 文件。

XSSFWorkbook workBook = new XSSFWorkbook();
XSSFSheet sheet = workBook.createSheet("Related_SRC");
String realName = "Test.xlsm";
File file = new File("C:\\sdpApp", realName);
try {
    FileOutputStream fileOutput = new FileOutputStream(file);
        workBook.write(fileOutput);
        fileOutput.close();
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }

谢谢

4

2 回答 2

14

根据 Apache POI 的文档,无法创建宏: http: //poi.apache.org/spreadsheet/limitations.html

但是,可以读取和重写包含宏的文件,并且 apache poi 将安全地保留宏。

这是一个例子:

String fileName = "C:\\new_file.xlsm";

try {

    Workbook workbook;
    workbook = new XSSFWorkbook(
        OPCPackage.open("resources/template_with_macro.xlsm")
    );

    //DO STUF WITH WORKBOOK

    FileOutputStream out = new FileOutputStream(new File(fileName));
    workbook.write(out);
    out.close();
    System.out.println("xlsm created successfully..");

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (InvalidFormatException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

创建的文件不会给您错误。

于 2013-08-21T09:11:53.757 回答
2

XLSM 是带有宏的 Excel 电子表格,如果您的工作表中不需要宏,您也可以简单地使用 .xlsx 作为扩展名。

您还可以通过 HSSFWorkbook 生成一个 .xls 文件(即旧格式),Excel 应该能够很好地打开 .xls。这种方法的唯一限制是 .xls 的行数限制为 65k。

于 2013-08-21T07:18:28.003 回答