C#关闭当前excel进程方法

来源:互联网 发布:java 找工作 编辑:程序博客网 时间:2024/06/06 02:46
 

一直被一个问题困扰就是导出excel时如何关闭excel进程,我使用过oExcelApp.Quit(); 也用过GC回收,结果都不理想,后来发现可以kill进程,但是问题是kill进程 时不好解决多人并发的使用,比如一个人在导表然后kill所以的excel但是如果同时又有人在导表那么这就把另外一个excel结束了,现在我们要办的 是如何kill当前这个进程,这里我们先看一下代码:

oExcelApp.Quit();
    oExcelApp = null;
    PublicMethod.Kill(oExcelApp);//调用kill当前excel进程

PublicMethod.Kill()内容是:

using System.Runtime.InteropServices;
 public class PublicMethod
 {
  public PublicMethod()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
  [DllImport("User32.dll",   CharSet   =   CharSet.Auto)]  
  public static extern int GetWindowThreadProcessId(IntPtr hwnd,out int ID);
  public static void Kill(Excel.Application excel)
  {  
   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
  }

}

 

这样我们就可以关闭当前进程excel而不是杀掉所有的类型为excel进程了,

 

另外一个新发现的方法:

如果你某刻发现一个excel做模板然后载入excel应用对象,导出数据如果excel进程自己会退出,那么复制这个模板,然后清空内容,重新在这个摸板设计你x想要的模板内容,载入这个模板excel应用对象,导出数据,那么这个excel进程自己会很听话的退掉,
我曾经测试过,再系统非常多用户时同时点击导出excel报表也仅仅是2-3个进程,正常使用仅仅一个!前提是你要发现一个听话的excel模板。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 乳胶枕头太高了怎么办 枕头太高脖子痛怎么办 颈椎突出症状缓解后怎么办 外痔疼的的历害怎么办 小肚子疼得历害怎么办 练瑜伽伤到颈椎怎么办 鼻子干口干胃烧怎么办 颈椎病压迫神经引起手麻怎么办 4个月婴儿睡觉少怎么办 晚上睡觉睡不好老是醒来怎么办 吃了没熟的香蕉怎么办 70岁父母老吵架怎么办 怀孕七个月晚上睡不着怎么办 九个月宝宝睡眠不好怎么办 一个月的宝宝放不下怎么办 宝宝被吓了发烧怎么办 体内火气重睡不着觉怎么办 宝宝睡觉一直翻身发出声音怎么办 严重失眠怎么办整夜睡不着觉 腿疼得睡不着觉怎么办 19岁晚上睡不着该怎么办 工作累的想哭怎么办 心累迷茫想哭怎么办 白天很累晚上又睡不着怎么办 发型睡觉压乱了怎么办 通宵一夜第二天怎么办 夏天了腿脚还凉怎么办 咖啡色三天了月经还是下不来怎么办 睡觉姿势不对腰疼怎么办 来月经吃了香瓜怎么办 减肥期间晚上有饭局怎么办 减肥期间遇到晚上聚餐怎么办 婴儿脸不向上睡怎么办 睡觉压奶了疼怎么办 堵奶了挤不下来怎么办 孕36周胎儿腿短怎么办 孕晚期胎儿腿短怎么办 孕晚期宝宝腿短怎么办 手劳累过度麻痛怎么办 大人发烧40不退怎么办? 颈椎扯的脑袋疼怎么办