2 ljj917 ljj917 于 2014.11.11 16:18 提问

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();
    }

2个回答

devmiao
devmiao   Ds   Rxr 2014.11.18 15:58
已采纳

虽然可以在asp.net中通过定时器处理一些任务,但是如果你工作量大,间隔时间长,建议还是放在专门的windows服务中处理。使用asp.net处理的弊端是:asp.net进程必须不断请求激活,否则会因为休眠而回收,asp.net进程处理繁重的任务会干扰正常响应同时客户端的请求,等等。

q107770540
q107770540   Ds   Rxr 2014.11.23 20:28

写一个WINDOWS服务,发布到服务器上 设置好执行计划

不建议用ASP.NET来做这事,这不是ASP.NET干的活

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!