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