问题描述
- asp.net定时导出Excel
-
描述:最近在做一个工作流的项目,其中步骤中系统可以在每个月的十五号,三十号自动导出Excel。
附言:网上搜索到好多使用Timer并在global.asax文件中判断并执行代码的方便,我也那么做了,结果还是不可以,这里是否还有其他方法,请大家指教啦。
这是我在Global.asax文件中写的,报错了请指教一下protected void Application_Start(object sender, EventArgs e) { #region 2014-11-10 每月十五号,三十号自动生成Excel文件 if (System.DateTime.Today.Equals(15) || System.DateTime.Today.Equals(30)) { System.Timers.Timer myTimer = new System.Timers.Timer(); myTimer.Elapsed += new ElapsedEventHandler(myTimer_Elapsed); myTimer.Enabled = true; myTimer.AutoReset = true; } #endregion } #region 2014-11-10 每月十五号,三十号自动生成Excel文件 void myTimer_Elapsed(object source, ElapsedEventArgs e) { try { YourTask(); } catch (Exception ee) { } } void YourTask() { System.Data.DataTable dtStatus = dbopimp.GetTodayDataExcel(System.DateTime.Now); CreateExcel(dtStatus, System.DateTime.Now.ToShortDateString()); } //导出Excel public void CreateExcel(System.Data.DataTable dt, string FileName) { System.Data.DataTable dtname = dbopimp.GetAreaList(); for (int j = 0; j < dtname.Rows.Count; j++) { string areaname = dtname.Rows[0]["areaname"].ToString(); FileName = areaname + "当天数据" + FileName; HttpResponse resp; resp =Response; resp.AppendHeader("Content-Disposition", "attachment;filename=Excel" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString() + ".xls"); resp.Charset = "UTF-8"; resp.ContentEncoding = System.Text.Encoding.Default; resp.ContentType = "application/ms-excel";//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword string colHeaders = "", ls_item = ""; int i = 0; //定义表对象与行对像 DataRow[] myRow = dt.Select(""); resp.ContentType = "application/ms-excel"; //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符 for (i = 0; i < dt.Columns.Count - 1; i++) { colHeaders += dt.Columns[i].Caption.ToString() + "t"; } colHeaders += dt.Columns[i].Caption.ToString() + "n"; //向HTTP输出流中写入取得的数据信息 resp.Write(colHeaders); //逐行处理数据 foreach (DataRow row in myRow) { //在当前行中,逐列获得数据,数据之间以t分割,结束时加回车符n for (i = 0; i < dt.Columns.Count - 1; i++) { ls_item += row[i].ToString() + "t"; } ls_item += row[i].ToString() + "n"; //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据 resp.Write(ls_item); ls_item = ""; } //写缓冲区中的数据到HTTP头文件中 resp.End(); } } //datagrid public void ToExcel(System.Web.UI.Control ctl) { HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls"); HttpContext.Current.Response.Charset = "UTF-8"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default; HttpContext.Current.Response.ContentType = "application/ms-excel";//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword ctl.Page.EnableViewState = false; System.IO.StringWriter tw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw); ctl.RenderControl(hw); HttpContext.Current.Response.Write(tw.ToString()); HttpContext.Current.Response.End(); }
解决方案
虽然可以在asp.net中通过定时器处理一些任务,但是如果你工作量大,间隔时间长,建议还是放在专门的windows服务中处理。使用asp.net处理的弊端是:asp.net进程必须不断请求激活,否则会因为休眠而回收,asp.net进程处理繁重的任务会干扰正常响应同时客户端的请求,等等。
解决方案二:
写一个WINDOWS服务,发布到服务器上 设置好执行计划
不建议用ASP.NET来做这事,这不是ASP.NET干的活
时间: 2024-10-22 02:15:33