该方法为后台导出excel文件,然后链接返回到前台提供下载的方法
前台使用button事件的handler函数触发Export_excel()函数,并在后台下载成功后,前台通过返回的链接进行下载
Export_excel()函数构造为
var Export_excel = function () { var sKey = $("#sKey").val();//定义各类需要传的值
//alert(sort +'-'+order); $.ajax({ url: "/AJAX/T_Grad_Info.ashx", data: { action: "print", skey: sKey },//传值,也就是后台datatable所需要导出的列,可以传多值,本工程中仅需传递查询的关键字 type: "post", timeout: 50000, success: function (r) { var domain = document.domain;//成功下载至后台后下载 var url = r; window.open(url); }, error: function (XMLHttpRequest, textStatus, errorThrown) { $.messager.alert('提示', '服务器错误,请稍后重试'); } }) }
后台产生datatable后
DataTable dt = PubClass.T_Grad_Info.GetList_part(strWhere, OrderSort); //为datatable添加标题,根据datatable的列进行添加 dt.Columns[0].ColumnName = "姓名"; string path = context.Server.MapPath("/download/"); string filename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls"; dataTableToExcel(dt, path + filename); //调用函数 //string data = context.Request.Form["data"]; //File.WriteAllText(context.Server.MapPath(fn), data, Encoding.UTF8);//如果是gb2312的xml申明,第三个编码参数修改为Encoding.GetEncoding(936) context.Response.Write("/download/" + filename);//返回文件路径提供下载 context.Response.End();
所调用的dataTableToExcel()为
//输出excel private void dataTableToExcel(DataTable table, string file) { //添加标签,解决数字在excel中变为科学计数法问题 string title = "<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\"> <tr style=\"font-weight: bold; white-space: nowrap;\">"; FileStream fs = new FileStream(file, FileMode.OpenOrCreate); //FileStream fs1 = File.Open(file, FileMode.Open, FileAccess.Read); StreamWriter sw = new StreamWriter(new BufferedStream(fs), Encoding.UTF8); //System.Text.Encoding.Default title += "<td>" + "人数" + "</td>";//本人的项目中由于需要在excel的最前面添加标号,所以这里又进行了添加 for (int i = 0; i < table.Columns.Count ; i++) { title += "<td>" + table.Columns[i].ColumnName +"</td>"; //栏位:自动跳到下一单元格 } title = "<td>" + title + "</td></tr>"; sw.Write(title); int j = 1; foreach (DataRow row in table.Rows) { string line = "<tr>"; line += "<td>" + j + "</td>"; j++; for (int i = 0; i < table.Columns.Count ; i++) { line += "<td style=\"vnd.ms-excel.numberformat:@\">" + row[i].ToString().Trim() + "</td>"; //内容:自动跳到下一单元格 } line += "</tr>"; //line = line.Substring(0, line.Length - 1) ; //截取最后一个字符 sw.Write(line); } sw.Close(); fs.Close(); }