C#Excel工作簿已关闭,但无法移动文件

时间:2017-09-19 15:09:12

标签: c# excel

我正在通过

打开Excel文件
app = new Microsoft.Office.Interop.Excel.Application();
wb = app.Workbooks.Open(fromFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

然后我操纵细胞,效果很好。我将文件保存到另一个文件夹,而不是我打开它。

wb.SaveAs(toFile, Microsoft.Office.Interop.Excel.XlFileFormat.xlCSVWindows, Type.Missing, Type.Missing, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlLocalSessionChanges, false, Type.Missing, Type.Missing, true);

我关闭了应用和工作簿:

wb.Close(true, Type.Missing, Type.Missing);
app.Quit();

当我现在想通过File.Move()移动原始文件时,我收到错误:

  

该进程无法访问该文件,因为它正由另一个

使用      

过程。

我错过了什么吗?

编辑:

非常感谢你们。它一直是对象的缺失版本。

Marshal.FinalReleaseComObject(object)

编辑2:

好吧,但现在我可以运行一次,现在我总是得到错误:

  

此文件目前无法在此计算机上使用。

结合COMException

  

调用的对象已与其客户端断开连接。

2 个答案:

答案 0 :(得分:4)

您需要使用

Marshal.ReleaseComObject(Object_to_be_released)

用于互操作服务中使用的所有对象。

_xlApp.Quit();
Marshal.ReleaseComObject(_xlApp);

答案 1 :(得分:0)

在将excel文件从源文件夹移动到目标文件夹之前,您需要释放与excel文件相关的所有引用。 您想要发布的参考文献列在Grand Crofton给出的答案中 请参考他的回答:How to release excel process?