C#读写(OFFICE 2013)excel表格(续)

      既然能通过C#操作EXCEL了,但是使用完后,会出现下面的情况(图片来自这里):

C#读写(OFFICE 2013)excel表格(续)_第1张图片

        这样就会启动多个线程,导致每次需写入数据到EXCEL中的时候,会提示当前操作的表格(其他 的表格就另当别论啦)正在被使用,以只读的方式打开。

    调用下面的代码做处理,在关闭和回收系统资源后,手动杀死EXCEL线程。方法如下:

[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);

// 结束 Excel 进程
public static void KillExcel(Application excel)
{
    IntPtr t = new IntPtr(excel.Hwnd);
    int k = 0;
    GetWindowThreadProcessId(t, out k);
    System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
    p.Kill();
}
      接着在关闭资源和回收资源后,调用该函数,如:

 sheet = null;
 book = null;
 excel.Quit();
///---这里调用杀死EXCEL线程
///--杀死 EXCEL进程
KillExcel(excel);
excel = null;
///---回收系统资源
GC.Collect();
   完美解决启动多个EXCEL线程的问题。

此方案出处:http://www.cnblogs.com/abel/archive/2013/07/16/3194678.html

你可能感兴趣的:(C#,Excel出现多个进程,C#打印Excel表格)