当前位置: 首页 > 编程笔记 >

C#实现GridView导出Excel实例代码

路昆杰
2023-03-14
本文向大家介绍C#实现GridView导出Excel实例代码,包括了C#实现GridView导出Excel实例代码的使用技巧和注意事项,需要的朋友参考一下

导出Excel在很多项目中经常用到,本人介绍了C#实现GridView导出Excel实例代码,也全当给自己留下个学习笔记了。

using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Text;

namespace DotNet.Utilities
{
 /// <summary>
 /// Summary description for GridViewExport
 /// </summary>
 public class GridViewExport
 {
  public GridViewExport()
  {
   //
   // TODO: Add constructor logic here
   //
  }

  public static void Export(string fileName, GridView gv)
  {
   HttpContext.Current.Response.Clear();
   HttpContext.Current.Response.AddHeader(
    "content-disposition", string.Format("attachment; filename={0}", fileName));
   HttpContext.Current.Response.ContentType = "application/ms-excel";
   //HttpContext.Current.Response.Charset = "utf-8";


   using (StringWriter sw = new StringWriter())
   {
    using (HtmlTextWriter htw = new HtmlTextWriter(sw))
    {
     // Create a form to contain the grid
     Table table = new Table();
     table.GridLines = GridLines.Both; //单元格之间添加实线

     // add the header row to the table
     if (gv.HeaderRow != null)
     {
      PrepareControlForExport(gv.HeaderRow);
      table.Rows.Add(gv.HeaderRow);
     }

     // add each of the data rows to the table
     foreach (GridViewRow row in gv.Rows)
     {
      PrepareControlForExport(row);
      table.Rows.Add(row);
     }

     // add the footer row to the table
     if (gv.FooterRow != null)
     {
      PrepareControlForExport(gv.FooterRow);
      table.Rows.Add(gv.FooterRow);
     }

     // render the table into the htmlwriter
     table.RenderControl(htw);

     // render the htmlwriter into the response
     HttpContext.Current.Response.Write(sw.ToString());
     HttpContext.Current.Response.End();
    }
   }
  }

  /// <summary>
  /// Replace any of the contained controls with literals
  /// </summary>
  /// <param name="control"></param>
  private static void PrepareControlForExport(Control control)
  {
   for (int i = 0; i < control.Controls.Count; i++)
   {
    Control current = control.Controls[i];
    if (current is LinkButton)
    {
     control.Controls.Remove(current);
     control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
    }
    else if (current is ImageButton)
    {
     control.Controls.Remove(current);
     control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
    }
    else if (current is HyperLink)
    {
     control.Controls.Remove(current);
     control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
    }
    else if (current is DropDownList)
    {
     control.Controls.Remove(current);
     control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
    }
    else if (current is CheckBox)
    {
     control.Controls.Remove(current);
     control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
    }

    if (current.HasControls())
    {
     PrepareControlForExport(current);
    }
   }
  }


  /// <summary>
  /// 导出Grid的数据(全部)到Excel
  /// 字段全部为BoundField类型时可用
  /// 要是字段为TemplateField模板型时就取不到数据
  /// </summary>
  /// <param name="grid">grid的ID</param>
  /// <param name="dt">数据源</param>
  /// <param name="excelFileName">要导出Excel的文件名</param>
  public static void OutputExcel(GridView grid, DataTable dt, string excelFileName)
  {
   Page page = (Page)HttpContext.Current.Handler;
   page.Response.Clear();
   string fileName = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(excelFileName));
   page.Response.AddHeader("Content-Disposition", "attachment:filename=" + fileName + ".xls");
   page.Response.ContentType = "application/vnd.ms-excel";
   page.Response.Charset = "utf-8";

   StringBuilder s = new StringBuilder();
   s.Append("<HTML><HEAD><TITLE>" + fileName + "</TITLE><META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></head><body>");

   int count = grid.Columns.Count;

   s.Append("<table border=1>");
   s.AppendLine("<tr>");
   for (int i = 0; i < count; i++)
   {

    if (grid.Columns[i].GetType() == typeof(BoundField))
     s.Append("<td>" + grid.Columns[i].HeaderText + "</td>");

    //s.Append("<td>" + grid.Columns[i].HeaderText + "</td>");

   }
   s.Append("</tr>");

   foreach (DataRow dr in dt.Rows)
   {
    s.AppendLine("<tr>");
    for (int n = 0; n < count; n++)
    {
     if (grid.Columns[n].Visible && grid.Columns[n].GetType() == typeof(BoundField))
      s.Append("<td>" + dr[((BoundField)grid.Columns[n]).DataField].ToString() + "</td>");

    }
    s.AppendLine("</tr>");
   }

   s.Append("</table>");
   s.Append("</body></html>");

   page.Response.BinaryWrite(System.Text.Encoding.GetEncoding("utf-8").GetBytes(s.ToString()));
   page.Response.End();
  }

 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍C#导出GridView数据到Excel文件类实例,包括了C#导出GridView数据到Excel文件类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#导出GridView数据到Excel文件类。分享给大家供大家参考。具体如下: 这段C#代码自定义了一个封装类,用于将GridView数据导出到Excel文件 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍ASP.NET使用GridView导出Excel实现方法,包括了ASP.NET使用GridView导出Excel实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ASP.NET使用GridView导出Excel实现方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的asp.net程序设计有所帮助。

  • 本文向大家介绍C++中实现把表的数据导出到EXCEL并打印实例代码,包括了C++中实现把表的数据导出到EXCEL并打印实例代码的使用技巧和注意事项,需要的朋友参考一下 实现把表的数据导出到EXCEL并打印实例代码 首先加入这两句: 下面正式开始:  感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 本文向大家介绍Django 导出 Excel 代码的实例详解,包括了Django 导出 Excel 代码的实例详解的使用技巧和注意事项,需要的朋友参考一下 这篇技术贴讲怎样在Django的框架下导出Excel, 最开始打算用ajax post data 过去,但是发现不行,所以改用了get的方式。如果只有一个id(pk)那用get的方式很简单就可以访问对应的view section,但是如果是多个

  • 本文向大家介绍java实现的导出Excel工具类实例,包括了java实现的导出Excel工具类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java实现的导出Excel工具类。分享给大家供大家参考,具体如下: ExcelExportUtil: VerifyUtil: 更多关于java相关内容感兴趣的读者可查看本站专题:《Java操作Excel技巧总结》、《Java+MySQL数据库程

  • 本文向大家介绍C#实现几十万级数据导出Excel及Excel各种操作实例,包括了C#实现几十万级数据导出Excel及Excel各种操作实例的使用技巧和注意事项,需要的朋友参考一下 先上导出代码   1. 打开现有的Excel文件   2.复制sheet页   注意 这里Copy方法的两个参数,指是的复制出来新的sheet页是在指定sheet页的前面还是后面,上面的例子就是指复制的sheet页在第一