操作完成后释放Excel * 32进程

试图找出为什么我的EXCEL * 32过程仍然在使用,直到我的应用程序和excel文件都closures。 在创build之后,我必须丢失一些东西,就像这个代码之后,应用程序保存在EXCEL * 32资源中。 任何build议让它在出口操作后“放手”完成?

此外,我不想closures新创build的Excel工作表,我只想释放与我的实际.net应用程序相关的资源。

Application xls = new Application(); xls.SheetsInNewWorkbook = 1; // Create our new excel application and add our workbooks/worksheets Workbook Workbook = xls.Workbooks.Add(); Worksheet CrossoverPartsWorksheet = xls.Worksheets[1]; // Create our new excel application and add our workbooks/worksheets Workbook Workbook = xls.Workbooks.Add(); Worksheet CrossoverPartsWorksheet = xls.Worksheets[1]; ///////////////////////////////////////// // < DO EXCEL EXPORT OPERATIONS HERE > // ///////////////////////////////////////// // Release our resources. Marshal.ReleaseComObject(Workbook); Marshal.ReleaseComObject(CrossoverPartsWorksheet); Marshal.ReleaseComObject(xls); 

当你写

 Workbook Workbook = xls.Workbooks.Add(); 

CLR不仅为Workbook创build了RCW (运行时可调用包装器)对象,还为Workbooks集合创build了对象(因为您需要的对象将用于Add()方法)。 如果CLR创buildRCW对象,并且不保留引用,则不能最终确定它。

所以,主要规则: 你应该避免双点呼叫expression式

 var workbooks = xls.Workbooks; var workbook = workbooks.Add(); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(workbooks); 

Marshal.FinalReleaseComObject(xls)就是你要找的东西。