C#如何结束EXCEL进程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#如何结束EXCEL进程相关的知识,希望对你有一定的参考价值。

我用using ( Microsoft.InterOp.Office.Excel.ApplicationClass excel = new Microsoft.InterOp.Office.Excel.ApplicationClass())

..........代码

无法释放Excel进程,按理说using()内的所有对象都会被回收的。

参考技术A Excel不是托管代码,试试用

#region 结束EXCEL.EXE进程的方法
/// <summary>
/// 结束EXCEL.EXE进程的方法
/// </summary>
/// <param name="m_objExcel">EXCEL对象</param>
[DllImport("user32.dll", SetLastError = true)]
static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);

public void KillSpecialExcel(Microsoft.Office.Interop.Excel.Application m_objExcel)

try

if (m_objExcel != null)

int lpdwProcessId;
GetWindowThreadProcessId(new IntPtr(m_objExcel.Hwnd), out lpdwProcessId);

System.Diagnostics.Process.GetProcessById(lpdwProcessId).Kill();


catch (Exception ex)

MessageBox.Show(ex.Message);


#endregion
参考技术B 这个可以删掉
System.Diagnostics.Process[] process=System.Diagnostics.Process.GetProcessesByName("Excel");
foreach (System.Diagnostics.Process p in process)

if (!string.IsNullOrEmpty(ProName))

try

p.Kill();

catch

本回答被提问者采纳
参考技术C 还没做过 参考技术D 没遇到

c#如何获取excel应用程序

可以通过 new Microsoft.Office.Interop.Excel.ApplicationClass()创建excel应用程序,过程有点慢,并且如果已经存在一个excel进程的话仍然会创建,那有没有办法先判断进程中是否已经存在excel应用程序,如果有的话直接获取这个excel应用程序?

不能直接获取,只能把之前的进程杀死,然后自己再创建。
创建excel应用程序时,一定要主动将创建的程序结束,否则它会一直存在。
参考技术A Microsoft.Office.Interop.Excel.Application m_Excel = (Microsoft.Office.Interop.Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");追问

你好,我再请问下,如何先判断进程中是否存在Excel.Application进程,因为我发现,如果进程中没有excel进程的话,直接运行上面的代码会出错,其实我想要的效果就是如果进程中存在就获取,否则就new。

追答

你判断可以 m_Excel 是否为 null
if(m_Excel == null)

//再在这里new excel进程


再不行用trycatch//出错时,再在这里new excel进程

追问

你说的第一种不行,因为不存在进程时会出错,第二种方法可行,另外还有一种方法,我也是刚知道的,根据Process.GetProcessesByName( "Excel.Application").Length判断,谢谢你!

本回答被提问者采纳
参考技术B 用下卓正软件的pageoffice,挺好用的

以上是关于C#如何结束EXCEL进程的主要内容,如果未能解决你的问题,请参考以下文章

C#中各种结束进程的方法

2008.1.1 结束进程

vs2013调试程序无法结束进程怎么办?

多线程问题,,如何让所有子线程结束后再执行主线程,,要C#

C# 使用线程池设置每个线程的执行时间,怎样设置结束时间?

c#多线程,怎么等待别的线程都结束?谢谢!!