我正在尝试写一个函数,可以创建一个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);我也尝试了create()函数,而不是openOrCreate函数,但是错误仍然存在。所以这让我怀疑我对这个包的open和create功能的理解。Here是包含已发生错误信息的问题。
发布于 2014-01-10 23:47:02
您混淆了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结构手动填充它(通常您可能不想这样做!)
发布于 2014-01-11 02:49:34
我们可以说,OPCPackage分别与xlsx文件相关,XSSFWorkbook与OPCPackage相关。
OpenOrCreate函数打开与文件相关的包,如果该包存在,则创建一个包(这种情况很少发生)。换句话说,它几乎不使用f.exists检查就可以执行Gagravarr编写的操作。
如果指定的文件不存在,则此函数返回的是新创建的包,否则包将从该文件中提取。
操作的后续过程通常是:
相关的新XSSFWorkbook
https://stackoverflow.com/questions/21048178
复制相似问题