Web项目中,很多时候须要实现将查询的数据集导出为Excel、Word等文档的功能,很多时候不太希望在工程中添加对Office组件相关的DLL的引用,甚至有时候受到Office不同版本的影响,导致在不同的服务器上部署后功能受限,或和其它项目冲突,那么,使用这种简单粗暴的方式,可能会解决部分猿类的烦恼忧愁。
public static bool DataTableToExcel(System.Data.DataTable dataTable, string fileName) { if (dataTable == null) return false; if (string.IsNullOrWhiteSpace(fileName)) return false; HttpResponse httpResponse = HttpContext.Current.Response; //ContentType 指定文件类型可以为application/ms-excel、application/ms-word、application/ms-txt、application/ms-html httpResponse.ContentType = "application/vnd.ms-excel"; httpResponse.ContentEncoding = Encoding.UTF8; //context.Response.Charset = "GB2312"; //"attachment"表示作为附件下载,可以改成"online"在线打开。"filename=xxx.xls"指定输出文件名,其扩展名和文件类型相符,可为:.doc .xls .txt .html httpResponse.AppendHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8) + ".xls"); //导出文件 System.IO.StringWriter sw = sw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); //为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid System.Web.UI.WebControls.DataGrid datagrid = datagrid = new System.Web.UI.WebControls.DataGrid(); datagrid.DataSource = dataTable.DefaultView; datagrid.AllowPaging = false; datagrid.DataBind(); //返回客户端 datagrid.RenderControl(htw); httpResponse.Write(sw.ToString()); httpResponse.End(); return true; }
以上代码中指定 ContentType 属性为Excel,即导出Excel格式的文件,稍作修改亦可导出其它类型的文件,不做赘述。当然,也可以把功能函数写的更为通用,通过参数判断导出哪种文件类型,有需要的自己进行改进和优化吧。
另外,在导出文件名称为中文的时候,可能会出现乱码,因此需要使用UrlEncode编码一下。
时间: 2024-10-10 16:21:56