簡體   English   中英

我想在不殺死 Excel 進程的情況下關閉超過 2 個打開的特定 excel 文件

[英]I want to close a specific excel file amongst more then 2 open without Killing Excel process

我打開了三個 excel 文件(MS office 16)。 我的代碼檢查特定文件是否打開,然后嘗試關閉它,但它關閉 excel 進程,最終關閉所有 excel 文件。

我注意到在任務管理器中,所有文件只有一個 EXCEL.EXE 進程,在詳細信息選項卡下,我可以看到所有打開的 excel 文件的名稱。

What I Tried is :

System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses("Excel");    
  foreach (Process p in processes)
  {
      if (p.MainWindowTitle == "MyFile.xlsx - Excel")
      {
          p.Kill();
          break;
      }
  }

下面的代碼什么也不做:

 Microsoft.Office.Interop.Excel.Application xlApp = new icrosoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(path);
            //xlWorkbook.Close(false);

            xlWorkbook.Close(true, Type.Missing, Type.Missing);
            xlApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
            xlWorkbook = null;
            xlApp = null;

            GC.Collect();

不要殺死進程,而是向 window 發送關閉消息:

System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses("Excel");    
foreach (Process p in processes)
{
  if (p.MainWindowTitle == "MyFile.xlsx - Excel")
  {
    int hwnd = 0;

    //Get a handle for the Application main window
    hwnd = FindWindow(null, p.MainWindowTitle);

    //send WM_CLOSE system message
    if (hwnd != 0)
      SendMessage(hwnd, WM_CLOSE, 0, IntPtr.Zero); 

    break;
  }
}

暫無
暫無

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

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