首页 > 代码库 > 利用HttpResponse将DataTable数据导出为Excel/Word/Txt/Html文档

利用HttpResponse将DataTable数据导出为Excel/Word/Txt/Html文档

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编码一下。

 

利用HttpResponse将DataTable数据导出为Excel/Word/Txt/Html文档