一,datatable導出Excel,用戶可以選擇路徑,方法如下:
/// <summary> /// DataTable導出到Excel /// </summary> /// <param name="dt">DataTable類型的數據源</param> /// <param name="FileName">文件名</param> /// <param name="httpContext">httpcontext</param> public void CreateExcel(DataTable dt, string FileName, HttpContext httpContext) { httpContext.Response.Clear(); httpContext.Response.Charset = "UTF-8"; httpContext.Response.Buffer = true; httpContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); httpContext.Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls\""); httpContext.Response.ContentType = "application/ms-excel"; string colHeaders = string.Empty; string ls_item = string.Empty; DataRow[] myRow = dt.Select(); int i = 0; int cl = dt.Columns.Count; for (int j = 0; j < dt.Columns.Count; j++) { ls_item += dt.Columns[j].ColumnName + "\t"; //欄位:自動跳到下一單元格 } ls_item = ls_item.Substring(0, ls_item.Length - 1) + "\n"; foreach (DataRow row in myRow) { for (i = 0; i < cl; i++) { if (i == (cl - 1)) { ls_item += row[i].ToString() + "\n"; } else { ls_item += row[i].ToString() + "\t"; } } httpContext.Response.Output.Write(ls_item); ls_item = string.Empty; } httpContext.Response.Output.Flush(); httpContext.Response.End(); }
前端頁面調用方法如下:
<a href="Import.ashx" >導出Excel</a>
二,datatable導出Excel,保存到服務器上。方法如下:
/// <summary> /// DataTable導出到Excel /// </summary> /// <param name="table">DataTable類型的數據源</param> /// <param name="file">需要導出的文件路徑</param> public void dataTableToCsv(DataTable table, string file) { string title = ""; FileStream fs = new FileStream(file, FileMode.OpenOrCreate); StreamWriter sw = new StreamWriter(new BufferedStream(fs), System.Text.Encoding.Default); for (int i = 0; i < table.Columns.Count; i++) { title += table.Columns[i].ColumnName + "\t"; //欄位:自動跳到下一單元格 } title = title.Substring(0, title.Length - 1) + "\n"; sw.Write(title); foreach (DataRow row in table.Rows) { string line = ""; for (int i = 0; i < table.Columns.Count; i++) { line += row[i].ToString().Trim() + "\t"; //內容:自動跳到下一單元格 } line = line.Substring(0, line.Length - 1) + "\n"; sw.Write(line); } sw.Close(); fs.Close(); }
前端調用方法:
<a onclick="Import()">導出Excel</a> function Import() { $.post("Import.ashx", {}, function (data) { alert("導出成功"); }); }