C#如何结束EXCEL进程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#如何结束EXCEL进程相关的知识,希望对你有一定的参考价值。
我用using ( Microsoft.InterOp.Office.Excel.ApplicationClass excel = new Microsoft.InterOp.Office.Excel.ApplicationClass())
..........代码
无法释放Excel进程,按理说using()内的所有对象都会被回收的。
#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进程的主要内容,如果未能解决你的问题,请参考以下文章