C# Excel互操作,Excel的延迟实例

C# Excel互操作,Excel的延迟实例,c#,excel-interop,C#,Excel Interop,简单的代码,我认为它应该杀死Excel。但是任务管理器说这会留下一个Excel实例运行。我错过了什么?多谢各位 using Microsoft.Office.Interop.Excel; //Stuff... // Launch dialog picker that return path to Excel file, in string // called excelTemplate Microsoft.Office.Interop.Excel.Application xlTemp = new

简单的代码,我认为它应该杀死Excel。但是任务管理器说这会留下一个Excel实例运行。我错过了什么?多谢各位

using Microsoft.Office.Interop.Excel;
//Stuff...
// Launch dialog picker that return path to Excel file, in string
// called excelTemplate
Microsoft.Office.Interop.Excel.Application xlTemp = new Microsoft.Office.Interop.Excel.Application();
Workbook workbook = xlTemp.Workbooks.Open(excelTemplate);
xlTemp.DisplayAlerts = false;

// Poke through individual sheets, get some info from them

 workbook.Close();
 xlTemp.Quit();

您可以使用自动处置应用程序

using(Microsoft.Office.Interop.Excel.Application xlTemp = new 
Microsoft.Office.Interop.Excel.Application())
{
   Workbook workbook = xlTemp.Workbooks.Open(excelTemplate);
   xlTemp.DisplayAlerts = false;

   // Poke through individual sheets, get some info from them

   workbook.Close();
}

除了需要释放每个COM对象外,还要注意,通过执行xlTemp.Workbooks.Open,您未将xlTemp.工作簿分配给可在以后发布的变量,这是在泄漏COM引用。

可能重复的请参阅我的评论。我突然想到,搜索工作表时,可能会将其保留在与打开时不同的工作表上,但是DisplayAlerts=false将抑制“是否保存”框。。。。所以我尝试添加objectmisvalue=System.Reflection.Missing.Value;并指定工作簿。Closefalse、misValue、misValue;Excel Interop的设计目的是让开发者讨厌他们的生活。我建议你看看ePlus。您不需要运行Excel的打开实例来打开电子表格并读取它。您甚至不需要安装Excel。你只需像打开文档一样打开它,然后阅读你想要的内容。这与复制品有何不同?
Application xlTemp = new Application();
Workbooks workbooks = xlTemp.Workbooks;
Workbook workbook = workbooks.Open(excelTemplate);

// Do stuff.

workbook.Close();
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(workbooks);
xlTemp.Quit();
Marshal.ReleaseComObject(xlTemp);