POI – 在Excel中打开时无法写入文件?

我是新的网站。 我试图在打开的时候写一个excel文件(使用POI / JAVA)。

当我尝试创build一个文件输出stream来写入文件时,我得到一个java.io.FileNotFoundException错误。

FileOutputStream不起作用。 我收到以下消息:

该进程无法访问该文件,因为正在被另一个进程使用。

  try { FileOutputStream fileOut; XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("Classeur.xlsm")); ... ... fileOut = new FileOutputStream("Classeur.xlsm"); wb.write(fileOut); fileOut.close(); } catch (FileNotFoundException e){ e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 

有谁知道我可以修复它? 我正在写一个(POI-Java-Swing)应用程序来dynamic读写excel文件。

谢谢你的帮助

Windows本身不会让你这样做。 恐怕你的代码中没有任何东西可以让你这样做。 您需要先在Excel中关闭该文件。

编辑 – 我从你的描述中假设你已经在Excel中打开了自己的文件。 你可能不是。 然而,其他的东西肯定会发生 – 例如,它可能是Java应用程序的另一个实例。 即使确保像Windows资源管理器没有访问/使用该文件,例如检查属性。 直到你排除,如上所述,Windows本身会阻止你访问它。

还有另一个进程正在运行,正在访问您正在尝试写入的确切 Excel文件。 查看是否没有正在运行的Excel应用程序(如Microsoft Excel)对您的文件执行锁定,或者是已经锁定到同一文件的Java进程。

如果文件是打开的,你将得到java.io.FileNotFoundException 这就是为什么,在写文件之前,你必须检查它。

例如:

 File file = new File("workbook.xls"); if(file.canWrite()) { System.out.println("File is open"); } else { FileOutputStream fileOut = new FileOutputStream(file); wb.write(fileOut); fileOut.close(); } 

在我讨论的一个类似的问题不能删除java主题中的文件 。 也许它可以帮助你找到一个正确的方法来解决你的问题。

那么我不知道这是否会工作,但我想你应该试试看。

当我在做一个类似的事情时,我发现excel公式可以引用另一个excel文件的单元格,例如

 ='D:\excelfiles\[Book1.xlsx]Sheet1'!$A$1 

那么为什么不更新Book1.xlsx(关闭所以你不会得到异常)的另一个文件,并让您打开的文件引用Book1.xlsx中的单元格的位置

那么我期待在这里很多downvotes,但我认为它值得一试:)