打开和创建函数OPCPackage有什么区别

时间:2014-01-10 15:30:53

标签: 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);

而不是openOrCreate我尝试了create()功能,但错误仍然存​​在。所以这让我怀疑对这个包的开放和创建功能的理解。 Here是发生错误信息的问题。

2 个答案:

答案 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。

如果指定的文件不存在,此函数返回的是新创建的包,否则从文件中提取包。

您的行动通常是后续流程:

  1. 创建新文件对象
  2. 打开与此文件相关的OPCPackage
  3. 创建与此XSSFWorkbook对象相关的新XSSFWorkbook