DataGridView中多维表头如何导出到Excel

解决方案 »

  1.   

     /// <summary>
        /// 导出
        /// </summary>
        /// <param name="dtData"></param>
        /// <param name="FileName"></param>
        /// <param name="fields"></param>
        public void doExport(DataTable dtData, string FileName, DataControlFieldCollection fields)
        {
            // 当前对话
            System.Web.HttpContext curContext = System.Web.HttpContext.Current;
            // IO用于导出并返回excel文件
            System.IO.StringWriter strWriter = null;        if (dtData != null)
            {
                // 设置编码和附件格式
                System.Web.HttpContext.Current.Response.Clear();            HttpContext.Current.Response.Buffer = true;
                string fileName = HttpUtility.UrlEncode(FileName, System.Text.Encoding.GetEncoding("GB2312"));
                curContext.Response.ContentType = "text/csv";
                curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + ".csv"); //定义输出文件和文件名
                // 导出excel文件
                strWriter = new System.IO.StringWriter();
                if (dtData.Rows.Count != 0)
                {
                    curContext.Response.ContentEncoding = System.Text.Encoding.Default;
                    curContext.Response.Charset = "GB2312";
                    //strWriter.Write("开始时间,");
                    //strWriter.Write(this.bgntime.Value+",");
                    //strWriter.Write("结束时间"+",");
                    //strWriter.Write(this.endtime.Value);
                    //strWriter.WriteLine();
                    foreach (DataControlField field in fields)
                    {
                        if (!string.IsNullOrEmpty(field.HeaderText))
                        {
                            strWriter.Write(field.HeaderText + ",");
                        }
                    }
                    strWriter.Write("\n");                //foreach (DataRow dr in dtData.Rows)
                    for (int j = 0; j < dtData.Rows.Count;j++ )
                    {
                        DataRow dr = dtData.Rows[j];                    for (int i = 0; i < dtData.Columns.Count; i++)
                        {
                            if (i == 0)
                            {
                                strWriter.Write("\"" + (j+1).ToString() + "\"" + ",");
                            }
                            else
                            strWriter.Write("\"" + dr[i].ToString() + "\"" + ",");
                        }
                        strWriter.Write("\n");
                    }            }
                curContext.Response.Write(strWriter.ToString());
                curContext.Response.Flush();
                curContext.Response.End();
            }
        }
           protected void ibtnDaoChu_Click(object sender, ImageClickEventArgs e)
        { 
            DataControlFieldCollection dcfc = new DataControlFieldCollection();
            DataTable dd = Session["dtExport"] as DataTable;
            dcfc = sgv1.Columns;
            doExport(dd, "logs", dcfc);  
         
        }
      

  2.   

         
    private System.Globalization.CultureInfo myCItrad;
        private StringWriter stringWrite;
        private HtmlTextWriter htmlWrite;HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.Charset = "GB2312";
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";        HttpContext.Current.Response.Write("<meta http-equiv=Content-Type content=\"text/html; charset=GB2312\">");
            myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
            stringWrite = new StringWriter(myCItrad);
            htmlWrite = new HtmlTextWriter(stringWrite);
     for (int i = 0; i < ds.Tables.Count; i++)
            {
                DataGrid dg = new DataGrid();
                dg.DataSource = ds.Tables[i];
                dg.ShowHeader = false;//是否显示列名
                dg.HeaderStyle.BackColor = Color.Yellow;
                dg.DataBind();
                dg.RenderControl(htmlWrite);
            }        HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename='" + HttpContext.Current.Server.UrlEncode(filename) + "'.xls");//下载的文件标题为中文        HttpContext.Current.Response.Write(stringWrite.ToString());
            HttpContext.Current.Response.End();
      

  3.   

    自己定义一个DATABLE就可以了,然后再进行表格合并就可以了。
      

  4.   

    你的表头的数据保存在哪里?表头有几行,每行有哪些列?把这些数据读出来,写到EXCEL