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

问题描述 投票:0回答:5

我是该网站的新用户。我尝试在 Excel 文件打开时对其进行写入(使用 POI / JAVA)。

当我尝试创建文件输出流以写入文件时,出现

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)应用程序来动态读取/写入 Excel 文件。

感谢您的帮助

java windows apache-poi
5个回答
4
投票

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

编辑 - 根据您的描述,我假设您已在 Excel 中自行打开该文件。你可能不是。然而,其他东西肯定会这样做——例如,它可能是您的 Java 应用程序的另一个实例。甚至确保 Windows 资源管理器之类的东西不会访问/使用该文件,例如检查属性。在您排除这一点之前,正如前面提到的,Windows 本身会阻止您访问它。


3
投票

有另一个进程正在某处运行,正在访问您尝试写入的exact Excel 文件。查看是否有正在运行的 Excel 应用程序(如 Microsoft Excel)锁定您的文件,或者是否有 Java 进程已锁定同一文件。


1
投票

如果文件已打开,您将获得

java.io.FileNotFoundException
。这就是为什么在写入文件之前你必须检查它。

示例:

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

0
投票

我无法删除 java 中的文件主题中讨论了类似的问题。也许它可以帮助您找到解决问题的正确方法。


0
投票

我不知道这是否有效,但我想你应该尝试一下。

当我做与你类似的事情时,我了解到Excel公式可以引用另一个Excel文件的单元格,例如

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

那么,为什么不更新另一个文件,例如 Book1.xlsx(该文件已关闭,这样您就不会出现异常),并让您打开的文件引用 Book1.xlsx 中单元格的位置

嗯,我期待这里有很多反对票,但我认为值得一试:)

© www.soinside.com 2019 - 2024. All rights reserved.