日期:2014-05-19  浏览次数:20763 次

在C#中打开Excel问题,
我在C#中打开Excel时,系统已打开Excel,如何区分那个是C#中打开的,在关闭时,如何将,C#中打开的Excel关掉,而不是删除所有Excel进程

------解决方案--------------------
取得进程的ID:
private void GetProcess()
{
System.Diagnostics.Process[] ps= System.Diagnostics.Process.GetProcesses();
for (int i = 0; i <ps.Length;i++)
{
if (ps[i].ProcessName.ToUpper() == "EXCEL ")
{
ProcsID=ps[i].Id.ToString();
return;
}
}
}

结束进程:
System.Diagnostics.Process[] ps= System.Diagnostics.Process.GetProcesses();

for (int i = 0; i <ps.Length;i++)
{
if (ps[i].Id.ToString()==ProcsID)
{
ps[i].Kill();
return;
}
}

------解决方案--------------------
楼上说的是将系统进程中第一个名字是excel的进程杀掉
但是如果说 之前开了很多excel文档 然后用c#程序开了一个excel进程就不能这样做了

比较好的方法(个人认为是)参照msdn中com组件释放的办法

NAR(workSheet);
NAR(workbook);
application.Quit();
NAR(application);
GC.Collect();
GC.WaitForPendingFinalizers();

private void NAR(object o)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}
finally
{
o = null;
}
}

这样写完后应该还会有一个c#程序占用的excel进程
在c#程序结束后 自动消失

个人认为是这样的