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

时间:2012-10-17 16:03:51

标签: java windows apache-poi

我是网站上的新手。我尝试在打开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文件。

感谢您的帮助

5 个答案:

答案 0 :(得分:4)

Windows本身不允许你这样做。我担心你的代码中没有任何内容可以让你这样做。您需要先在Excel中关闭该文件。

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

如果文件已打开,您将获得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();
}

答案 3 :(得分:0)

I can't delete a file in java主题中讨论的类似问题。也许它可以帮助您找到解决问题的正确方法。

答案 4 :(得分:0)

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

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

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

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

嗯,我期待在这里有很多downvotes,但我认为值得一试:)