C#实现导出Excel
这段时间用到了导出Excel的功能,这个功能还是比较常用的,我常用的有两个方法,现在整理一下,方便以后查看。
一、实现DataTable数据导出到本地,需要自己传进去导出的路径。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /// <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(); } |
二、实现DataTable数据导出到本地,路径可以由用户自主选择。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | /// <summary> /// DataTable导出到Excel /// </summary> /// <param name="dt">DataTable类型的数据源</param> /// <param name="FileType">文件类型</param> /// <param name="FileName">文件名</param> public void CreateExcel(DataTable dt, string FileType, string FileName) { Response.Clear(); Response.Charset = "UTF-8" ; Response.Buffer = true ; Response.ContentEncoding = System.Text.Encoding.GetEncoding( "GB2312" ); Response.AppendHeader( "Content-Disposition" , "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls\"" ); Response.ContentType = FileType; 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" ; } } Response.Output.Write(ls_item); ls_item = string .Empty; } Response.Output.Flush(); Response.End(); } |
三、方法的调用。
第一种方法的调用:
1 | this .dataTableToCsv(dt, @"C:\Users\Admin\Desktop\收听率" + DateTime.Now.ToString( "yyyy-MM-dd HHmmss" ) + ".xls" ); //调用函数 |
第二种方法的调用:
1 | CreateExcel(dt, "application/ms-excel" , "Excel" + DateTime.Now.ToString( "yyyy-MM-dd HHmmss" ) + ".xls" ); //调用函数 |
这两种方法都是可以直接调用的,只需要传入需要的参数即可。
如果是通过前台js方式实现,跳转href为实现数据导出的页面地址,我是通过前台跳转到ashx页面实现的
ashx页面内容
public void ProcessRequest(HttpContext context) {string message = ""; string Action = context.Request["Action"]; switch (Action) {case "Excel": DataTable Radio = GetExcleData(context); //获取导出数据源 RadioCommon helper = new RadioCommon(); helper.ExportExcel(Radio, "application/ms-excel", "Excel" + DateTime.Now.ToString("yyyy-MM-dd HHmmss")); break; } context.Response.Write(message); }
js部分内容
$("#Excel").bind('click', function () { var url = "AjaxHandler/RadioFamilyDayNumber.ashx?Action=Excel"; window.location.href = url;//导出Excel })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!