Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
if (app == null)
{
MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
return;
}
try
{
app.Visible = false;
Workbook wBook = app.Workbooks.Add(true);
Worksheet wSheet = wBook.Worksheets[1] as Worksheet;
app.DisplayAlerts = false;//保存Excel的时候,不弹出是否保存的窗口直接进行保存
////..............................................
app.AlertBeforeOverwriting = false;
wBook.Save();//保存工作簿
string cTemp = DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day;
//app.Save(filePath + filename + cTemp + ".xls");//保存excel文件
wBook.Saved = true;
wBook.SaveCopyAs(filePath + filename + cTemp + ".xls");
//WZ.BLL.Common.ToolUtils.nOpenStatus = true;
}
catch (Exception ex)
{
//WZ.BLL.Common.ToolUtils.nOpenStatus = true;
MessageBox.Show("异常:" + ex.ToString());
}
finally
{
if (app != null)
{
app.Quit();
app = null;
}
}
为何任务管理器里有很多Excel.exe进程啊
{ if (xlApp.ActiveWorkbook != null)
{
xlApp.ActiveWorkbook.Close(false, Type.Missing, Type.Missing);
} xlApp.Quit(); //杀进程
IntPtr t = new IntPtr(xlApp.Hwnd);
int k = 0;
GetWindowThreadProcessId(t, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();
}
GC.Collect();//调用系统的api 上边代码用的
[DllImport("User32.dll", CharSet = CharSet.Auto)]
private static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
那其他线程 就没有办法生成Excel文件了
Com组件是根据引用计数器来选择关闭的,每引用一次,计数器加1,每释放一次,计数器减1。当计数器为0时,才会真正释放。所以每次引用workBook都要关闭,不然引用计数器不会清零,就不会真正释放
{
wBook.Close(true, Temp+".xls", false);
}
关掉后 还是总有一个Excel.exe存在 是不是我这里关的有问题啊
Excel.Workbook wBook = null;
Excel.Worksheet wSheet = null;
string cTemp = string.Empty;
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
if (app == null)
{
return;
}
try
{
app.Visible = false;
wBook = app.Workbooks.Add(true);
wSheet = wBook.Worksheets[1] as Excel.Worksheet;
app.DisplayAlerts = false;//保存Excel的时候,不弹出是否保存的窗口直接进行保存
////..............................................
app.AlertBeforeOverwriting = false;
wBook.Save();//保存工作簿
cTemp = DateTime.Now.ToString("yyyy-MM-dd");
//app.Save(filePath + filename + cTemp + ".xls");//保存excel文件
wBook.Saved = true;
wBook.SaveCopyAs(@"D:\" + cTemp + ".xls");
//WZ.BLL.Common.ToolUtils.nOpenStatus = true;
}
catch (Exception ex)
{ }
finally
{
if (wBook != null)
{
wBook.Close(true, @"D:\" + cTemp + ".xls", false);
}
if (app != null)
{
app.Quit();
app = null;
}
}
根据你那个代码改的,我这里运行后没有留下Excel.exe的进程啊
你的程序是不是Asp.net的程序啊?如果是Asp.net的话,那么是会留下一个Excel的进程的,这个进程在IIS的应用程序池关闭时一起关闭,或者在你本地调试的时候,在停止右下方状态栏中的本地Server时一起关闭