ljj917 2014-11-11 08:18 采纳率: 33.3%
浏览 1995
已采纳

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 2014-11-18 07:58
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建