【问题标题】:How to check if Excel is open, and if so, save and close it C#如何检查Excel是否打开,如果是,保存并关闭它C#
【发布时间】:2016-07-17 05:40:39
【问题描述】:

我想检查 excel 是否打开。如果是,我想保存活动工作簿并关闭 Excel。本质上,我的目标是杀死每个 excel 进程,但在此之前我想保存 excel 工作簿。这是我的代码...

Process[] localByName = Process.GetProcessesByName("excel");
        for (int i = 0; i < localByName.Length; i++)
        {
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            Workbook wb = xlApp.ActiveWorkbook; 
            wb.Save();  // I get an error here. "Object reference not set to an instance of an object".
            GC.Collect();
            GC.WaitForPendingFinalizers();
            wb.Close(); 
            Marshal.FinalReleaseComObject(wb);  
            xlApp.Quit();    
            Marshal.FinalReleaseComObject(xlApp);    
        }

我读到 xlApp.ActiveWorkbook 以只读模式获取工作簿。这可能是我的问题吗?如果是这样,请提出一个成功的方法来解决这个问题。谢谢!

【问题讨论】:

标签: c# excel process


【解决方案1】:

> Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 这会创建 Excel.Application COM 对象的新实例,但不会返回一个活动实例。为此,请尝试

Excel.Application xlApp = null;
while(xlApp == null)
{
    try
    {
        xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
    }
    catch (System.Runtime.InteropServices.COMException ex)
    {
        // no more instances/error, exit out of loop
        break;
    }

    // do whatever with the instance
    Workbook wb = xlApp.ActiveWorkbook; 
    wb.Save();
    GC.Collect();
    GC.WaitForPendingFinalizers();
    wb.Close(); 
    Marshal.FinalReleaseComObject(wb);  
    xlApp.Quit();    
    Marshal.FinalReleaseComObject(xlApp);

    // set null to continue loop
    xlApp = null;
}

来源:Get instance of Excel application with C# by Handle

【讨论】:

  • 感谢您的回复!出于某种原因,我在尝试保存工作簿时仍然遇到同样的错误。我什至复制了您的代码,但仍然出现错误。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2012-11-06
  • 2012-04-11
  • 2014-11-01
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多