我正在开发一个.NET应用程序,它可以打开一个工作簿,运行一些VBA宏,刷新连接等等。这很好,但是当我运行一些使用Solver Add-in功能的VBA宏时即使在我正确地重新发布所有COM对象之后,Excel实例也会继续运行(调用' Marshal.ReleaseComObject')。
我该如何解决?
修改
以下是重现此问题的代码示例:
Excel.Application xlApp = null;
Excel.Workbooks xlWorkbooks = null;
try
{
xlApp = new Excel.Application();
xlApp.Visible = true;
xlApp.DisplayAlerts = false;
xlWorkbooks = xlApp.Workbooks;
Excel.Workbook xlWorkbook = xlWorkbooks.Open(Filename: path, ReadOnly: false);
xlApp.Run(macro);
xlWorkbook.RefreshAll();
xlWorkbook.Close(SaveChanges: true);
xlApp.Quit();
releaseObject(xlWorkbook);
releaseObject(xlWorkbooks);
releaseObject(xlApp);
}
catch (Exception e)
{
Console.WriteLine("Erro ao executar métodos Excel");
Console.WriteLine(e.Message);
}
这里我实现了释放COM对象的函数:
static void releaseObject(object o)
{
try
{
if (o != null) Marshal.ReleaseComObject(o);
}
catch
{
o = null;
}
}