我正在尝试编写一个可以创建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);
而不是openOrCreate
我尝试了create()
功能,但错误仍然存在。所以这让我怀疑对这个包的开放和创建功能的理解。 Here是发生错误信息的问题。
答案 0 :(得分:4)
您对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();
}
调用new XSSFWorkbook();
会创建一个全新的空白工作簿来填充。调用OPCPackage.create()
创建一个新的空OPC / OOXML包,其中没有任何内容,您需要手动填充空XLSX或DOCX结构(您可能通常不想这样做!)
答案 1 :(得分:0)
我们可以说OPCPackage分别与xlsx文件和带有OPCPackage的XSSFWorkbook相关。
如果此软件包存在,OpenOrCreate函数将打开与该文件相关的软件包,否则会创建一个软件包(如果不是这种情况)。换句话说,它几乎完成了Gagravarr在没有使用的情况下所写的内容 f.exists check。
如果指定的文件不存在,此函数返回的是新创建的包,否则从文件中提取包。
您的行动通常是后续流程: