c# 导出Excel的方法很多,在此不进行一一介绍,可通过网上查找。在此仅说明如果使用excel组件时,导出excel后无法彻底关闭excel的问题。
通过 new Interop.Excel.Application()后,在系统中就建立了excel.exe进程,当完成导入工作后,尽管使用了GC.Collect(),但还会存在有可能无法冠词excel进程的问题。给出的方法是杀掉excel进程,但需要在杀excel进程 前需要获知程序创建的进程ID,以便通过ID杀掉进程,而不是通过名称杀掉进程,看到网上有些例子是通过名称杀进程,这样做有可能导致正在使用的excel文件也会被杀掉,造成用户操作损失。每个excel文档是独立的一个进程,所以需要分别考虑程序创建、用户创建的问题。仅杀死由程序创建的excel进程。方法如下:
1、获取进程ID ;可通过GetWindowThreadProcessId 获取;
2、杀死进程:根据获取的ID杀死进程 Process.Kill ()。
因我还未真正测试,故不提供源码,但此种方法已经有人验证过没有问题。如果熟悉以上操作,应该可以很快搞定。
关于c# 导出Excel文件,如果是采用excel组件导出,性能不是很高,至少在我测试Soukey采摘时,对于导出一个上万条的记录是感觉有点无法接受,所以,建议采用文件流的方式写入,因为导出Excel最主要的目的是可以将数据通过excel呈现,并非要进行很精美的排版(如果真的需要这样做,那建议还是采用excel组件,毕竟这是专业的),性能还是第一位的。
有关采用文件流的源码,可以参考Soukey采摘。