您的位置:首页 > 其它

在.net中结束Excel,Word进程

2008-04-02 17:50 441 查看
protected string createExcel()
{
string strExcelName;
string strTemplatePath;
System.Data.DataTable dt = new System.Data.DataTable();
DateTime startTime = DateTime.Now;
Excel.Application app = new ApplicationClass();
DateTime endTime = DateTime.Now;
Excel.Workbook wb;
object missing = System.Reflection.Missing.Value;
……

try
{

strTemplatePath = Server.MapPath("../Module/po002.xlt");
strExcelName = DateTime.Now.ToString("yyyyMMddHHmmss") + @".xls";
wb = app.Workbooks.Open(strTemplatePath, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
app.Visible = false;

…………

…………

Excel.Worksheet sheetTest = (Excel.Worksheet)wb.Worksheets["2"];
sheetTest.Visible = XlSheetVisibility.xlSheetHidden;

wb.SaveAs(strExcelName, missing, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing, missing);

System.Runtime.InteropServices.Marshal.ReleaseComObject(sheetTest);
wb.Close(null, null, null);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

}
catch (Exception exCreateExcel)
{
throw new Exception(exCreateExcel.Message);
}
finally
{
killProcess(startTime, endTime,"Excel");

GC.Collect();
GC.WaitForPendingFinalizers();
}

return strExcelName;
}



protected void killProcess(DateTime start,DateTime end,string ProcessName)
{
Process[] myProcesses;
DateTime ProStartTime;
myProcesses = Process.GetProcessesByName(ProcessName);

//因为暂时没有想到得到Excel进程ID的方法,所以只能判断进程启动时间
foreach (Process myProcess in myProcesses)
{
ProStartTime = myProcess.StartTime;
//myProcess.Id

if (start <= ProStartTime && ProStartTime <= end)
{
myProcess.Kill();
}
}
}

请注意红色代码:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: