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

本文关键字:进程 Excel 释放 操作 | 更新日期: 2023-09-27 18:30:15

试图弄清楚为什么我的 EXCEL*32 进程一直使用,直到我的应用程序和 excel 文件都关闭。创建后我一定缺少一些东西,就像应用程序在此代码之后保留了 EXCEL *32 资源一样。有什么建议可以让它在导出操作完成后"放手"吗?

另外,我

不想关闭新创建的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);

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

当你写的时候

Workbook Workbook = xls.Workbooks.Add();

CLR 不仅为 Workbook 创建 RCW(运行时可调用包装器)对象,还为工作簿集合创建对象(因为您需要用于Add()方法的对象)。如果 CLR 创建了 RCW 对象并且您不保留引用 - 则无法完成它。

所以,主要规则:应避免使用双点调用表达式

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

你要找的。