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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。