EXCEL导出问题,请教高手 急急!! System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsFile)GC.Collect()//其中xlsFile是个com的Object 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private void KillProcess(string processName) { System.Diagnostics.Process myproc= new System.Diagnostics.Process(); //得到所有打开的进程 try{ foreach (Process thisproc in Process.GetProcessesByName(processName)) { if(!thisproc.CloseMainWindow()){ thisproc.Kill(); } } } catch(Exception Exc) { msg.Text+= "杀死" + processName + "失败!"; } } 我只要关闭当前的这一个EXCEL即可,不能关闭所有的EXCEl进程 不知道你的是桌面程序还是web程序.你到网上找一个好点Excel导出的方法,网上很多的!有不占用进程的. 一直被一个问题困扰就是导出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.Hwnd 出错 它不能关闭自己所在的内存,所以,你用关闭后,可能还不成功。把这个功能写在一个方法F,然后另写一个方法调用F,调用GC内存强制回收 想问你一下 我想取得EXCEL的句柄 该怎么做啊下面的方法: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.Hwnd 无效......不知道怎么回事??很是郁闷...... 使用COM要注意“用完即释放”原则。你用excel会有那些application book sheet之类的,用完之后,全部释放掉,在任务管理器就看不到它了。Marshal.ReleaseComObject(excelApp);excelApp=null;.......... 如何将word中的表格复制到另外一个word文件中 C#08不能调用oracle 了解英语在线朗读的进............ VS2005下C++调用C#的DLL库 C#+access的ole字段储存修改打开word文档? 如何调用过程 怎么使dataGrid选中一行,用键盘的上下键 C#书籍 关于动态报表的做法? 怎样动态为类添加一些值,并可以象使用对象属性一样在设计程序时使用? 关于datatable数据提交问题 C#匿名内部类是否可以extends(继承)其它类,
{
System.Diagnostics.Process myproc= new System.Diagnostics.Process();
//得到所有打开的进程
try{
foreach (Process thisproc in Process.GetProcessesByName(processName)) {
if(!thisproc.CloseMainWindow()){
thisproc.Kill();
}
}
}
catch(Exception Exc)
{
msg.Text+= "杀死" + processName + "失败!";
}
}
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.Hwnd 出错
下面的方法:
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.Hwnd 无效......不知道怎么回事??
很是郁闷......
你用excel会有那些application book sheet之类的,用完之后,全部释放掉,在任务管理器就看不到它了。Marshal.ReleaseComObject(excelApp);
excelApp=null;.....
.....