簡體   English   中英

如何檢查Excel是否打開,如果打開,請保存並關閉C#

[英]How to check if Excel is open, and if so, save and close it C#

我想檢查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使工作簿處於只讀模式。 這可能是我的問題嗎? 如果是這樣,請提出一個成功的方法。 謝謝!

> Microsoft.Office.Interop.Excel.Application xlApp =新的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;
}

來源: 通過Handle獲取帶有C#的Excel應用程序實例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM