open 和 create 函数有什么区别 OPCPackage

Ama*_*tam 1 java apache-poi

我正在尝试编写一个函数,如果不存在,它可以创建一个 excel 文件。如果存在,则应在末尾附加内容。该文件可能会变大,所以我想使用 OPCPackage。这是代码片段:

String basePath = "/home/aman/Desktop";
String fileName = "result.xls";
File file = new File(basePath, fileName);
OPCPackage pkg = OPCPackage.openOrCreate(file);
Workbook wb = new XSSFWorkbook(pkg);
Run Code Online (Sandbox Code Playgroud)

而不是openOrCreate我create()也尝试了函数,但错误仍然存​​在。所以这让我怀疑我对这个包的 open 和 create 功能的理解。这是出现错误信息的问题。

Gag*_*arr 5

您混淆了 OOXML 包和 OOXML 文件格式之间的区别。一个.xlsx文件是建立在OOXML封装结构的俯视,但空OOXML包不是一个XLSX文件。

打个比方,想想想读一本装在包里的书。你是说“拿袋子,然后打开它拿出书”或“拿一个全新的空袋子,打开它,拿出书,哦,不,没有书……”

你可能想要做的更像是:

Workbook wb;
File f = new File("test.xlsx");

if (f.exists) {
   // Existing workbook, open
   OPCPackage pkg = OPCPackage.open(f);
   wb = new XSSFWorkbook(pkg);
} else {
   // Need to create a new, empty workbook
   wb = new XSSFWorkbook();
}
Run Code Online (Sandbox Code Playgroud)

调用new XSSFWorkbook();会创建一个全新的空工作簿来填充。调用OPCPackage.create()会创建一个新的空 OPC / OOXML 包,其中没有任何内容,然后您需要手动填充一个空的 XLSX 或 DOCX 结构(您可能通常不想这样做!)