ASP操作Excel后进程无法结束

时间:2021-09-01 20:27:03
ASP操作Excel后Excel进程无法结束,每操作一次就会增加一个Excel进程。

protected void ButtonGetFile_Click(object sender, EventArgs e)
        {
            string strErr="";
            string strTCTempFileName = "" ;

            AddNewTC();
            Application myExcel = new Application();
            try
            {
                InterService.CInterService interService = new InterService.CInterService();
                System.Data.DataSet ds = interService.getTCTemp(DropDownListTCTemp.SelectedValue);
                if (ds.Tables[0].Rows.Count - 1 < 0)
                {
                    strErr = "没有模板记录!";
                    LabelErrMsg.Text = strErr;
                    return;
                }
                System.Data.DataRow row = ds.Tables[0].Rows[ds.Tables[0].Rows.Count - 1];
                if (row["TCTempFile"].GetType().FullName != "System.DBNull")
                {
                    strTCTempFileName = row["TCTempFile"].ToString();
                }
                else
                {
                    strErr = "没有模板文件记录!";
                    LabelErrMsg.Text = strErr;
                    return;
                }
                //打开模板文件
                if (!File.Exists(Server.MapPath("/") + "ExcelFiles\\TCTempFiles\\" + strTCTempFileName + ".xls"))
                {
                    strErr = "服务器文件夹中没有该模板文件!";
                    LabelErrMsg.Text = strErr;
                    return;
                }
                myExcel.Application.Workbooks.Open(Server.MapPath("/") + "ExcelFiles\\TCTempFiles\\" + strTCTempFileName + ".xls");
                myExcel.Visible = false;
                // 写入内容
                if (WriteExcelData(myExcel, strTCTempFileName, out strErr) != 0)
                {
                    LabelErrMsg.Text = strErr;
                }
                //myExcel.Cells[2, 2] = "用模板导出的报表,这是数据";     
                //在当前目录下指定一个临时文件
                string strFileName = Server.MapPath("/") + "ExcelFiles\\" + "TC" + Session["UserID"] + ".xls";
                if (File.Exists(strFileName))
                {
                    File.Delete(strFileName);
                }
                myExcel.ActiveWorkbook.SaveAs(strFileName);
                myExcel.Application.Workbooks.Close();
                myExcel.Quit();
                Marshal.ReleaseComObject(myExcel);
                GC.Collect();
                GC.WaitForPendingFinalizers();
                //****发送文件
                Response.ClearContent();
                Response.ClearHeaders();
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("Content-Disposition", "inline;filename='" + DropDownListLot.SelectedValue + ".xls'");
                Response.WriteFile(strFileName);//FileName为Excel文件所在地址
                Response.Flush();
                Response.Close();
            }
            catch (Exception ex)
            {
                strErr = ex.Message;
                LabelErrMsg.Text = strErr;
                return;
            }
            finally
            {
                myExcel.Quit();
                Marshal.ReleaseComObject(myExcel);
                GC.Collect();
                GC.WaitForPendingFinalizers(); 
            }

           
        }

7 个解决方案

#1


为什么不去看看 这个

#2


调用office.excel.dll有时就是会出现这样的问题,死进程.
因为它的原理就是调用系统中的excel进程去操作文件
使用第三方dll直接操作文件好了,1楼已经给出了链接
无需安装office,兼容32位64位

#3


引用 2 楼 Z65443344 的回复:
调用office.excel.dll有时就是会出现这样的问题,死进程.
因为它的原理就是调用系统中的excel进程去操作文件
使用第三方dll直接操作文件好了,1楼已经给出了链接
无需安装office,兼容32位64位

谢谢,还有没有什么方法可以在操作Excel完成后强制结束这些进程呢。
ASP操作Excel后进程无法结束

#4


如果你做的是单机版的程序,我会告诉你可以使用Process.Kill()杀死进程
但是你的是网站,网站天生是多线程的,100个用户登陆同时导出,有可能打开了100个excel的进程,你胡乱的去杀死进程,会导致有的用户导出没有完成任务就提前结束了

#5


npoi,aspose,epplus,openxml,spire.xls都是不需要安装office直接操作xls文档的而且性能比com组件高。推荐使用

#6


推荐使用npoi,这个在服务器上面不会引发 操作excel的iis错误,推荐使用

#7


office.excel.dll 只能杀死本机电脑,服务器的杀不掉。我以前经常搞这东西,没办法。
还是换组件吧,npoi 不错

#1


为什么不去看看 这个

#2


调用office.excel.dll有时就是会出现这样的问题,死进程.
因为它的原理就是调用系统中的excel进程去操作文件
使用第三方dll直接操作文件好了,1楼已经给出了链接
无需安装office,兼容32位64位

#3


引用 2 楼 Z65443344 的回复:
调用office.excel.dll有时就是会出现这样的问题,死进程.
因为它的原理就是调用系统中的excel进程去操作文件
使用第三方dll直接操作文件好了,1楼已经给出了链接
无需安装office,兼容32位64位

谢谢,还有没有什么方法可以在操作Excel完成后强制结束这些进程呢。
ASP操作Excel后进程无法结束

#4


如果你做的是单机版的程序,我会告诉你可以使用Process.Kill()杀死进程
但是你的是网站,网站天生是多线程的,100个用户登陆同时导出,有可能打开了100个excel的进程,你胡乱的去杀死进程,会导致有的用户导出没有完成任务就提前结束了

#5


npoi,aspose,epplus,openxml,spire.xls都是不需要安装office直接操作xls文档的而且性能比com组件高。推荐使用

#6


推荐使用npoi,这个在服务器上面不会引发 操作excel的iis错误,推荐使用

#7


office.excel.dll 只能杀死本机电脑,服务器的杀不掉。我以前经常搞这东西,没办法。
还是换组件吧,npoi 不错