asp.net+js+ashx如何实现数据导出(EXCEL)

2025-10-02 07:46:46

1、<a class="button-a-radius"  style="background-color:red;float:left" id="btnReport">导出</a>

这句代码是页面中添加了一个导出按钮

2、在js中写一下代码,表示在当 DOM(文档对象模型) 已经加载,并且页面(包括图像)已经完全呈现时,会发生 ready 事件。由于该事件在文档就绪后发生

。因此我们,因此把所有其他的 jQuery 事件和函数置于该事件中。例如导出;

$(document).ready(function () {

//当导出这个链接触发时,我们执行ReportExcel()方法

  $("#btnReport").bind('click', function () {

        ReportExcel();

    });

})

3、//这里是导出执行的jquery方法,因为导出数据,必须要先获取要导出的数据,那么我们在这里去访问一般处理程序。

function ReportExcel() {

    var ogk01 = $("#txt_ogk01").val();

    var ogk02 = $("#txt_ogk02").val();

    var ogk14 = $('#txt_ogk14').combobox('getValue');

    $.ajax({

        url: '/ashx/axm/AxmReportAjax.ashx?a=1',

        cache: false,

        dataType: 'json',

        type: 'post',

        data: {

            ogk01: ogk01,

            ogk02: ogk02,

            ogk14: ogk14

        }, success: function (json) {

            if (json && json.success == "1") {

                $('#excelUrl').attr('href', json.msg)[0].click();

            }

          else {

                    $.messager.alert('系統提示', '導出Excel失敗!', 'warning');

                }

        }, error: function () {

            if (typeof arguments[2] == "object") {

                $.errorAlert(arguments[2].message);

            }

            else {

                $.errorAlert(arguments[2]);

            }

        }

    });

}

4、这里是一般处理程序的代码

 string connStr = string.Empty;

        string msg = string.Empty;

        public void ProcessRequest(HttpContext context)

        {

            context.Response.ContentType = "text/plain";

            try

            {

                try

                {

                    connStr = context.Session["connStr"].ToString();

                }

                catch (Exception)

                {

                    throw new Exception("timeout");

                }

                string ajax = context.Request["a"];

                switch (ajax)

                {

                    

                    case "1":

                        msg = Export(context);

                        break;

                }

            }

            catch (Exception ex)

            {

                msg = StringPlus.ToOpResult(false, ex.Message);

            }

            context.Response.Write(msg);

            context.Response.End();

        }

private string Export(HttpContext context)

        {

            try

            {

                string ogk01 = context.Request["ogk01"] ?? "";

                string ogk02 = context.Request["ogk02"] ?? "";

                string ogk14 = context.Request["ogk14"] ?? "";

                OgkFileBll bll = new OgkFileBll();

                DataTable excelDt = bll.Export(connStr, ogk01, ogk02, ogk14);

                string fileName = userID.Trim() + DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".xls";

                DataToExcel dte = new DataToExcel();

                string filePath = "/sendlog/downLoad/" + fileName;

                string strHtml = dte.DtToHtml(excelDt);

                File.WriteAllText(context.Server.MapPath(filePath), strHtml);

                msg = StringPlus.ToOpResult(true, filePath);

            }

            catch (Exception ex)

            {

                msg = StringPlus.ToOpResult(false, ex.Message);

            }

            return msg;

        }

5、  这一段是比较重要的,它主要是把获取到的表数据转换为Excel输出,因为我们的目的就是把表数据导出Excel

  /// <summary>

        /// DataTable 转换为Excel输出

        /// </summary>

        /// <param name="dt"></param>

        /// <returns></returns>

        public string DtToHtml(DataTable dt)

        {

            StringBuilder sb = new StringBuilder();

            if (dt != null)

            {  //生成<meta>标签

                sb.Append("<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=UTF-8\"/>");

                //生成标题列

                sb.Append("<table border=\"1\" style=\"background-color:#E8E8FF;font-weight:bold;\"><tr>");

                foreach (DataColumn dc in dt.Columns)

                {

                    sb.Append("<td style=\"text-align:center\">" + dc + "</td>");

                }

                sb.Append("</tr></table>");

            }

            if (dt != null && dt.Rows.Count > 0)

            {

                //生成內容

                sb.Append("<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">");

                foreach (DataRow dr in dt.Rows)

                {

                    sb.Append("<tr>");

                    for (var i = 0; i < dt.Columns.Count; i++)

                    {

                        sb.Append("<td style=\"text-align:center\">" + Convert.ToString(dr[i]).Trim() + "</td>");

                    }

                    sb.Append("</tr>");

                }

                sb.Append("</table>");

            }

            return sb.ToString();

        }

6、接下来就是关于业务逻辑层和数据访问层的编写了。这些靠自己了。只要实现第四步中的一下代码

DataTable excelDt = bll.Export(connStr, ogk01, ogk02, ogk14);

获取到excelDt(也就是表数据)就OK了

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢