我使用WorkbookFactory.create(new File("path/to/xlsx"))
构造了一个新的工作簿。但是,当我在启动应用程序后尝试在Excel中编辑文件时,收到一条错误消息,表明该文件正在使用中。我是否必须释放文件,如果是,该如何释放? (我在api文档中找不到类似Workbook.close()
的东西)还是我必须在其他地方查看?
我不知道还有什么地方可以看。该应用程序不会导致csv出现这些问题,对于excel文件,我只是将其称为转换器(xls => csv),这是唯一的区别。
(我正在使用POI 3.8)
最佳答案
如果需要完全控制何时关闭资源,则应自己创建OPCPackage,并将其传递给WorkbookFactory。 OPCPackage提供您需要的关闭方法。工作簿将保持打开状态直到垃圾回收
您的代码如下所示:
File f = new File("/path/to/excel/file");
Workbook wb = null;
NPOIFSFileSystem npoifs = null;
OPCPackage pkg = null;
try {
npoifs = new NPOIFSFileSystem(f);
wb = WorkbookFactory.create(npoifs);
} catch(OfficeXmlFileException ofe) {
pkg = OPCPackage.open(f);
wb = WorkbookFactory.create(pkg);
}
// Use it
if (npoifs != null) { npoifs.close(); }
if (pkg != null) { pkg.close(); }