各位大佬,有沒有在asp.net website c#殺掉過生成的excel進程
Excel.ApplicationClass m_objExcel = new Excel.ApplicationClass();
m_objExcel.Visible = false;
IntPtr t = new IntPtr(m_objExcel.Hwnd);
int k = 0;
GetWindowThreadProcessId(t,out k);
System.Diagnostics.Process P = System.Diagnostics.Process.GetProcessById(k); Excel.Workbooks m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
Excel.Workbook m_objBook = (Excel.Workbook)(m_objBooks.Add(true));
Excel.Worksheet m_objSheet = (Excel.Worksheet)m_objBook.ActiveSheet;
P.kill()
試過N多方法之後,網上找了這一種,只是IntPtr t = new IntPtr(m_objExcel.Hwnd)提示m_objExcel不包含Hwnd定義,困擾好久了,望高人幫忙解決
Excel.ApplicationClass m_objExcel = new Excel.ApplicationClass();
m_objExcel.Visible = false;
IntPtr t = new IntPtr(m_objExcel.Hwnd);
int k = 0;
GetWindowThreadProcessId(t,out k);
System.Diagnostics.Process P = System.Diagnostics.Process.GetProcessById(k); Excel.Workbooks m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
Excel.Workbook m_objBook = (Excel.Workbook)(m_objBooks.Add(true));
Excel.Worksheet m_objSheet = (Excel.Worksheet)m_objBook.ActiveSheet;
P.kill()
試過N多方法之後,網上找了這一種,只是IntPtr t = new IntPtr(m_objExcel.Hwnd)提示m_objExcel不包含Hwnd定義,困擾好久了,望高人幫忙解決
解决方案 »
- 新手请教:这两句话什么意思呢?
- 急!WPF项目中使用另外一个程序集中的资源字典引发System.IO.FileNotFoundException
- 两个同名函数,只有返回值类型不同,可以重载吗?按理说,可以重载呀,因为返回值类型也是“函数签名”的一部分呀?
- C# 控件GridView ,单击 对单元格进行编辑时,如何让其中的文字不被选中?
- c#关于datagridview动态添加行问题
- winform如何更改鼠标Cursor
- c#中的ComboBox调成可编辑状态,当输入完成后,想将输入的项增加到列表中,这是用什么事件?
- C#中使用openFileDialog读取文件改变系统默认路径
- C#动态调用Dll中的一个问题
- 新手提问:+textBox.text+ 是什么意思?+...+的具体用法?
- 关于变量传递的问题
- 权限分级+数据结构分析设计
// IntPtr t = new IntPtr(m_objExcel.Hwnd);
// int k = 0;
// GetWindowThreadProcessId(t,out k);
// System.Diagnostics.Process P = System.Diagnostics.Process.GetProcessById(k); Excel.Workbooks m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
Excel.Workbook m_objBook = (Excel.Workbook)(m_objBooks.Add(true));
Excel.Worksheet m_objSheet = (Excel.Worksheet)m_objBook.ActiveSheet;
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet);
m_objSheet = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook);
m_objBook.Close(false,null,null);
m_objBook = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);
m_objExcel = null;
m_objExcel.Quit();
// GC.Collect();// m_objBook.Close(false,null,null);
// m_objExcel.Quit();
// System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);
// m_objExcel = null;// P.Kill();哪種組合是正確的
int id = 0;
GetWindowThreadProcessId(t, out id);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(id);
//............
app.Quit();
p.Kill();
[DllImport("User32.dll", CharSet = CharSet.Auto)]
private static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
还要加这两个东西.
{
System.Diagnostics.Process myproc = new System.Diagnostics.Process();
//得到所有打开的进程
try
{
foreach (Process thisproc in Process.GetProcessesByName(processName))
{
if (!thisproc.CloseMainWindow())
{
if(thisproc!=null)
thisproc.Kill();
}
}
}
catch (Exception Exc)
{
throw Exc;
// msg.Text+= "杀死" + processName + "失败!";
}
} 调用方法:KillProcess("Excel");
取消此处注释,改为登录服务器的机器名和密码;config文件添加你杀死进程的权限.
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); IntPtr t = new IntPtr(app.Hwnd);
int id = 0;
GetWindowThreadProcessId(t, out id);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(id);
//............
app.Quit();
p.Kill();
我用的是
Excel.ApplicationClass m_objExcel = new Excel.ApplicationClass();
m_objExcel.Visible = false;
//IntPtr t = new IntPtr(m_objExcel.Hwnd);
現在此處IntPtr t = new IntPtr(m_objExcel.Hwnd); 提示m_objExcel沒有Hwnd的屬性
這個命名空間是什麼DLL檔來的?
com -> microsoft excel 11.0 object library 謝謝老兄我沒有11.0,只有9.0 上引入dll之後,沒有Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); 只能這樣定義Excel.Application m_objExcel=new Excel.ApplicationClass();就是前面的Microsoft.Office帶不出來,我現在是在web下面導出Excel,不是在winform下面導出,還請老兄多多指教
m_objExcel.Visible = false;
IntPtr t = new IntPtr(m_objExcel.Hwnd);
int id = 0;
GetWindowThreadProcessId(t,out id);
System.Diagnostics.Process P = System.Diagnostics.Process.GetProcessById(id);為什麼我得到的ID總是等於0啊?
然后调用GC?
在FINLLY里释放对象调用GC就是了。
if (P.Length > 0)
{
foreach (System.Diagnostics.Process p in P)
{
p.Kill();
}
} 关掉所有EXCEL
m_objExcel.Visible = false;
IntPtr t = new IntPtr(m_objExcel.Hwnd);
int id = 0;
GetWindowThreadProcessId(t,out id);
System.Diagnostics.Process P = System.Diagnostics.Process.GetProcessById(id);
經過測試,這個ID在website(asp.net 2003 c#)下是得不到的,但是在Winfrom中才能得到,結貼