excel导出进程无法关闭
我现在用C#写了一个winform应用程序,我现在是用线程导出Excel数据。数据可以成功导出,但是在任务管理器里的excel.exe进程就是无法随着数据导出结束而结束,怎么办呢?每导出一份数据就多一个excel.exe进程,郁闷
[解决办法]
/// <summary>
/// 预关闭未退出的Excel进程方法
/// </summary>
public void PreExitExcel()
{
System.Diagnostics.Process[] allProcess = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process thisprocess in allProcess)
{
string processName = thisprocess.ProcessName;
if (processName.ToLower() == "excel")
{
try
{
thisprocess.Kill();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return;
}
}
}
}
int ExcelID = 0;
GetWindowThreadProcessId(t, out ExcelID); //得到本进程唯一标志k
foreach (Process p in ps)
{
if (p.ProcessName.ToLower().Equals("excel"))
{
if (p.Id == ExcelID)
{
p.Kill();
}
}
}
}
[解决办法]
关闭excel进程的类和方法
public class KillMyExcelProcess
{
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
public static void Kill(Microsoft.Office.Interop.Excel.Application excel)
{
try
{
IntPtr t = new IntPtr(excel.Hwnd); //得到这个句柄,具体作用是得到这块内存入口
int k = 0;
GetWindowThreadProcessId(t, out k); //得到本进程唯一标志k
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用
p.Kill(); //关闭进程k
}
catch (Exception ex)
{
log4net.ILog objLogger_se = log4net.LogManager.GetLogger("SystemExceptionLogger");
objLogger_se.Fatal("System Exception Close Excel " + ex.Message + "Inner Message:" + ex.InnerException.Message + DateTime.Now.ToString());
throw ex;
}
}
}
public void CloseExcel(Microsoft.Office.Interop.Excel.Application ExcelApplication, Microsoft.Office.Interop.Excel.Workbook ExcelWorkbook)
{
ExcelWorkbook.Close(false, Type.Missing, Type.Missing);
ExcelWorkbook = null;
ExcelApplication.Quit();
GC.Collect();
KeyMyExcelProcess.Kill(ExcelApplication);
}