当前位置:软件学习 > Excel >>

C# DataTable 导出 Excel 进阶 多行表头、合并单元格

废话不多说了,直接上代码:
[csharp] 
using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Configuration; 
using System.Data; 
using System.Data.Common; 
using System.Data.OleDb; 
using System.Web.UI.WebControls; 
using System.Text.RegularExpressions; 
 
/// <summary> 
/// Common 的摘要说明 
/// 作者:李伟波 
/// 时间:2012-10-18 
/// </summary> 
public class Common 

    public Common() 
    { 
        // 
        //TODO: 在此处添加构造函数逻辑 
        // 
    } 
 
    /// <summary> 
    /// 描述:把DataTable内容导出excel并返回客户端  
    /// 作者:李伟波 
    /// 时间:2012-10-18 
    /// </summary> 
    /// <param name="dtData"></param> 
    /// <param name="header"></param> 
    /// <param name="fileName"></param> 
    /// <param name="mergeCellNums">要合并的列索引字典 格式:列索引-合并模式(合并模式 1 合并相同项、2 合并空项、3 合并相同项及空项)</param> 
    /// <param name="mergeKey">作为合并项的标记列索引</param> 
    public static void DataTable2Excel(System.Data.DataTable dtData, TableCell[] header, string fileName, Dictionary<int, int> mergeCellNums, int? mergeKey) 
    { 
        System.Web.UI.WebControls.GridView gvExport = null; 
        // 当前对话  
        System.Web.HttpContext curContext = System.Web.HttpContext.Current; 
        // IO用于导出并返回excel文件  
        System.IO.StringWriter strWriter = null; 
        System.Web.UI.HtmlTextWriter htmlWriter = null; 
 
        if (dtData != null) 
        { 
            // 设置编码和附件格式  
            curContext.Response.ContentType = "application/vnd.ms-excel"; 
            curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); 
            curContext.Response.Charset = "gb2312"; 
            if (!string.IsNullOrEmpty(fileName)) 
            { 
                //处理中文名乱码问题 
                fileName = System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8); 
                curContext.Response.AppendHeader("Content-Disposition", ("attachment;filename=" + (fileName.ToLower().EndsWith(".xls") ? fileName : fileName + ".xls"))); 
            } 
            // 导出excel文件  
            strWriter = new System.IO.StringWriter(); 
            htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter); 
 
            // 重新定义一个无分页的GridView  
            gvExport = new System.Web.UI.WebControls.GridView(); 
            gvExport.DataSource = dtData.DefaultView; 
            gvExport.AllowPaging = false; 
            //优化导出数据显示,如身份证、12-1等显示异常问题 
            gvExport.RowDataBound += new System.Web.UI.WebControls.GridViewRowEventHandler(dgExport_RowDataBound); 
 
            gvExport.DataBind(); 
            //处理表头 
            if (header != null && header.Length > 0) 
            { 
                gvExport.HeaderRow.Cells.Clear(); 
                gvExport.HeaderRow.Cells.AddRange(header); 
            } 
            //合并单元格 
            if (mergeCellNums != null && mergeCellNums.Count > 0) 
            { 
                foreach (int cellNum in mergeCellNums.Keys) 
                { 
                    MergeRows(gvExport, cellNum, mergeCellNums[cellNum], mergeKey); 
                } 
            } 
 
            // 返回客户端  
            gvExport.RenderControl(htmlWriter); 
            curContext.Response.Clear(); 
            curContext.Response.Write("<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=gb2312\"/>" + strWriter.ToString()); 
            curContext.Response.End(); 
        } 
    } 
    /// <summary> 
    /// 描述:行绑定事件 
    ///

补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,