我是网站上的新手。我尝试在打开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文件。
感谢您的帮助
答案 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,但我认为值得一试:)