打开并读取 Excel 文件后无法终止 EXCEL.EXE 进程

发布于 2024-10-21 08:25:43 字数 535 浏览 1 评论 0原文

我通过以下流程打开并从 Excel 中读取数据:

ApplicationClass objApp = new ApplicationClass();  
Workbooks objBooks = objApp.Workbooks;
Workbook objBook = objBooks.Open(..)
// Do something (read data...)
...
objBook.Close(false, Missing.Value, Missing.Value);
objApp.Quit();
Marshal.ReleaseComObject(objBooks);
Marshal.ReleaseComObject(objBook);
Marshal.ReleaseComObject(objApp);
objBook = null;
objApp = null;
GC.Collect();
GC.WaitForPendingFinalizers();

但是在上述过程之后,我检查任务管理器,EXCEL.EXE 进程仍然存在,不要被杀死。请告诉我原因,帮我解决一下!!!

I open and read data from excel by below flow:

ApplicationClass objApp = new ApplicationClass();  
Workbooks objBooks = objApp.Workbooks;
Workbook objBook = objBooks.Open(..)
// Do something (read data...)
...
objBook.Close(false, Missing.Value, Missing.Value);
objApp.Quit();
Marshal.ReleaseComObject(objBooks);
Marshal.ReleaseComObject(objBook);
Marshal.ReleaseComObject(objApp);
objBook = null;
objApp = null;
GC.Collect();
GC.WaitForPendingFinalizers();

But after above process, i check in Task Manager, EXCEL.EXE process still alive, don't be killed. Please tell me why, help me a solution!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝天白云 2024-10-28 08:25:43

这段代码怎么样?

[DllImport("user32.dll")]
private static extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, out IntPtr ProcessId);

在您完成所有代码之后,当您认为不需要 excel 文件时,请编写此代码

IntPtr hwnd = new IntPtr(ExcelObj.Hwnd); // Your Excel Application name
IntPtr processId;
IntPtr foo = GetWindowThreadProcessId(hwnd, out processId);
Process proc = Process.GetProcessById(processId.ToInt32());
proc.Kill();

How about this code

[DllImport("user32.dll")]
private static extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, out IntPtr ProcessId);

After all your code and when you think there is no need of excel file write this code

IntPtr hwnd = new IntPtr(ExcelObj.Hwnd); // Your Excel Application name
IntPtr processId;
IntPtr foo = GetWindowThreadProcessId(hwnd, out processId);
Process proc = Process.GetProcessById(processId.ToInt32());
proc.Kill();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文