[英]Close excel workbook without killing the excel process or other workbooks - C#
[英]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.