我使用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(); }

10-04 17:25