首页 > 系统相关 >关于杀死窗体自身创建的Excel 进程,而不影响其他

关于杀死窗体自身创建的Excel 进程,而不影响其他

时间:2022-12-23 20:34:50浏览次数:47  
标签:Process Excel System int 窗体 进程 杀死

前置感谢 http://www.cppblog.com/colys/archive/2009/02/09/25265.html#Post

困扰很久的事情,vb.net 或者C# 处理完excel 后,总会在进程中残留一个Excel 进程,从最开始的硬退窗体,到后面的全部杀死进程,总之一言难尽。

 Process[] ExcelProcess = Process.GetProcessesByName("Excel");//关闭进程
 foreach (Process p1 in ExcelProcess)
  {
  p1.Kill();
  }

以上是杀死全部Excel进程的代码,若要使用,需要引用  using System.Diagnostics;//process引用

下面是,关闭窗体自身创建的Excel进程,

网上很多,自己总弄不好,直到看到前置感谢的,才把自己的弄好,记录下,备用

 1 using System.Runtime.InteropServices;//杀进程DllImport引用
 2 
 3     [DllImport("User32.dll", CharSet = CharSet.Auto)]
 4         public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
 5         //以上2行,为杀Excel进程,可以单独放程序入口
 6 
 7 以下为一个按钮 的事件
 8  private void button21_Click(object sender, EventArgs e)
 9         {
10             saveFileDialog1.Title = "选择保存格式";
11             saveFileDialog1.Filter = "Excel07|*.xlsx|Excel 03|*.xls";
12             if (saveFileDialog1.ShowDialog() == DialogResult.OK)
13             {
14 
15                 Excel.Application xlApp = new Excel.Application();
16                 Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
17                 Excel.Worksheet st1 = (Excel.Worksheet)xlBook.Worksheets[1];
18 
19                 //以下收集创建的EXCEL进程句柄
20                 IntPtr t = new IntPtr(xlApp.Hwnd);
21                 int k = 0;
22                 GetWindowThreadProcessId(t, out k);
23                 System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
24                 //以上收集创建的EXCEL进程句柄
25 
26                 for (int c = 0; c<dataGridView1.Columns.Count;c++)
27                 {
28                     st1.Cells[1, c + 1].value = dataGridView1.Columns[c].HeaderText.ToString();
29                 }
30 
31                 for (int r = 0; r < dataGridView1.Rows.Count - 1; r++)
32                 {
33                     st1.Cells[r + 2, 1].value = "'" + dataGridView1.Rows[r].Cells[0].Value.ToString();
34                     st1.Cells[r + 2, 2].value = dataGridView1.Rows[r].Cells[1].Value.ToString();
35                 }
36 
37                 st1.Columns.AutoFit();//自动列宽
38                 xlApp.ActiveCell.HorizontalAlignment = Excel.Constants.xlCenter;
39                 st1.SaveAs(saveFileDialog1.FileName);
40                 
41                 xlBook.Close();
42                 p.Kill();
43                 xlBook = null;
44                 xlApp = null;
45 
46             }

注意事项,句柄的收集,必须在建立你Excel之后,销毁之前,不然报错!!!

其实网上有很多这个例子,一并感谢我看过的。

标签:Process,Excel,System,int,窗体,进程,杀死
From: https://www.cnblogs.com/RedLn/p/17001563.html

相关文章

  • java处理excel文件的读写
    简述1、一般会将文件地址作为入参,对文件进行处理2、将文件放到File中:Filefile=newFile(fileName)3、判断文件是否存在:if(!file.exists()){returnnull;}4、将文件......
  • 获取Excel列标
    ///<summary>///获取Excel列标ABC...Z等///</summary>///<paramname="col">Excel列数,从0开始</param>///<returns></returns>publicstringgetExcelColumn......
  • 爬豆瓣保存到Excel
    importreimporturllib.request,urllib.errorimportxlwtfrombs4importBeautifulSoupbaseurl="https://movie.douban.com/top250?start="#创建电影链接正则表达式对......
  • windows查找端口号并杀死进程
     1.windows下根据端口号查找进程并杀死: 查找端口号为8092的进程:netstat-aon|findstr"8092"杀死进程:taskkill/pid11456-f 2.linux下根据端口号查找进程并杀死......
  • VC 读写Excel (第三方类CSpreadSheet)
    1. 用VC6新建一个基于对话框的项目;2. 添加 CSpreadSheet.h,CSpreadSheet.cpp到项目中;3. 在C*Dlg.h 中添加 : #include "CSpreadSheet.h"4. 添加对应的读写函数5. 读......
  • vue中读取本地Excel文件
    readExcelFileconstXLSX=require('xlsx')constpath="./file/file.xlsx"//放在public目录下的文件可以直接访问axios.get(path,{responseType:'arraybuffer'......
  • winform窗体跟随
    publicpartialclassForm1:Form{[DllImport("User32.dll",EntryPoint="FindWindow")]privatestaticexternIntPtrFindWindow(stringlp......
  • 递规之三——完整的科目名称(Excel函数集团)
    使用了递规的Lambda,参数必须是序列数吗?当然不是!来看看这个例子:根据科目代码和科目名称,用公式完成完整的科目名称 自定义的名称是Itm,Itm的参数是Lambda中定义的参数x,......
  • 递规之二(Excel函数集团)
    递规,应该算是个数学问题吧,但它并不只能解决数学问题,还可以解决Excel里的迭代问题。ExcelHome的系列丛书之一,《Excel2019函数与公式应用大全》的第481页示例25-4,就是一个带......
  • 递规之一(Excel函数集团)
    递规,这名词出现在了Excel函数集团,是的,你没看错!但递规在工作表函数里,也不是无限制的用,而是有以下条件:需要Lambda出马需要一个起始开关需要自定义名称先祭一个最简单......