使用Apache POI将数据写入Excel 2007的xlsm文件格式

9
我已经编写了用于编写xlsm(Excel 2007)文件的Java文件。
使用Apache POI库,编写xlsx文件是成功的。并且编写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();
    }

谢谢


1
你正在使用哪个版本的POI? - centic
我们正在使用poi-3.8版本。 - user2636961
2个回答

15
根据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();
}

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


1
我该如何将ResultSet写入xlsm文件的特定工作表中? - Rikhi Sahu
我可以获取依赖的jar列表吗? - Mr. Mak

2

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

您还可以通过HSSFWorkbook生成.xls文件(即旧格式),Excel应该能够正常打开.xls文件。这种方法的唯一限制是.xls在行数上受到限制,最多只能有65k行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接