【发布时间】:2021-05-24 10:36:44
【问题描述】:
下面的代码会创建一个损坏的文件/只读 excel csv 文件,因此我无法打开该文件以在其中写入数据。我需要从csv file 读取数据,然后将其保存到 excel 文件中以绘制图形。我可以知道代码有什么问题吗?因为每次我想删除生成的文件时,即使我关闭它,它仍在进程中运行。每次都要去任务管理器强制关闭进程,然后才能删除文件。
我已经尝试了link 中提供的所有解决方案,但没有任何解决方案可以解决我的问题。我想尝试using,但我知道我必须做出哪些改变,所以这是我迄今为止唯一没有尝试过的。
Excel.WorkBook xlWorkBook;
...
public void createXMLFile()
{
Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
MessageBox.Show("Excel is not properly installed!!");
return;
}
object misValue = System.Reflection.Missing.Value;
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
xlWorkSheet.Cells[1, 1] = "Stroke";
xlWorkSheet.Cells[1, 2] = "Force";
xlWorkBook.SaveAs(filePath, Excel.XlFileFormat.xlWorkbookNormal, AccessMode: Excel.XlSaveAsAccessMode.xlExclusive);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(xlApp);
MessageBox.Show("Excel file created , you can find the file
D:\\Work\\ExtractData\\DataCharts");
}
【问题讨论】:
-
这能回答你的问题吗? Closing Excel Application Process in C# after Data Access。而且您应该以 99 票而不是 1 票来关注答案
-
嗯,你有一些 .NET 挂在上面的临时对象。我建议明确地使它们成为对象,然后也对它们调用 ReleaseComObject。您可能不知道临时对象,但 xlApp.Workbooks 是一个临时对象。 xlWorkbook.Worksheets 和 xlWorksheet.Cells 也是如此。我在 .NET / COM 互操作方面的经验以及试图避免将 COM 进程锁定在内存中的经验表明,要明确这些临时对象,使用它们,然后在它们上使用 ReleaseComObject。