ASP.NET2.0中如何将Gridview资料输出至Excel、Word

在透過使用Visual Studio 2005中的Gridview 將呈現資料時,使用

者常要求將資料輸出至Excel或Word 文件中,要怎麼做呢?


將GridView 匯出至Excel 這個問題,從早期Visual Studio

2002/2003中的Grid 就有解決方案了,但在GridView中則有少許

變化, 詳細的語法如下:

VB語法

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

Response.Clear()
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls")
Response.Charset = "big5"
Response.ContentType = "application/vnd.xls"
Dim stringWrite As System.IO.StringWriter = New System.IO.StringWriter
Dim htmlWrite As System.Web.UI.HtmlTextWriter = New HtmlTextWriter(stringWrite)
GridView1.RenderControl(htmlWrite) <--非GridView1請更改為要輸出名稱
Response.Write(stringWrite.ToString)
Response.End()

End Sub
務必加入下段語法
Public Overloads Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)

'Confirms that an HtmlForm control is rendered for the specified ASP.NET server control at run time.

End Sub

C#語法

protected void Button1_Click(object sender, EventArgs e)
    {
         Response.Clear();
         Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
         Response.Charset = "big5";
         Response.ContentType = "application/vnd.xls";
         System.IO.StringWriter stringWrite = new System.IO.StringWriter();
         System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
         GridView1.AllowPaging = false;
         GridView1.AutoGenerateEditButton = false;
         GridView1.AutoGenerateDeleteButton = false;
         GridView1.DataBind();
         GridView1.RenderControl(htmlWrite);
         Response.Write(stringWrite.ToString());
         Response.End();
    }
    public override void VerifyRenderingInServerForm(Control control)
    {
        /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
        server control at run time. */
    }

同樣的如果要將GridView資料輸出至Word文件,只要將

FileName.xls 改為 FileName.doc 及 application/vnd.xls 改為 application/vnd.doc

就可將資料輸出至Word文件中

例:
<%@ Page Language="C#" EnableEventValidation="false" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>

<script runat="server">
  ICollection CreateDataSource( )
  
{
    System.Data.DataTable dt 
= new System.Data.DataTable();
    System.Data.DataRow dr;
    dt.Columns.Add(
new System.Data.DataColumn("id"typeof(Int32)));
    dt.Columns.Add(
new System.Data.DataColumn("PkID"typeof(string)));
    dt.Columns.Add(
new System.Data.DataColumn("Title"typeof(string)));
    
for (int i = 0; i < 6; i++)
    
{
      dr 
= dt.NewRow();
      dr[
0= i;
      dr[
1= "123456789123456789123456789";
      dr[
2= "<a href='http://dotnet.aspx.cc/'>欢迎光临【孟宪会之精彩世界】</a>";
      dt.Rows.Add(dr);
    }

    System.Data.DataView dv 
= new System.Data.DataView(dt);
    
return dv;
  }


  protected 
void Page_Load( object sender, EventArgs e )
  
{
    
if (!IsPostBack)
    
{
      GridView1.BorderWidth 
= Unit.Pixel(2);
      GridView1.BorderColor 
= System.Drawing.Color.DarkOrange;
      GridView1.DataSource 
= CreateDataSource();
      GridView1.DataBind();
    }

  }


  protected 
void Button1_Click( object sender, System.EventArgs e )
  
{
    Response.Clear();
    Response.Buffer 
= true;
    Response.Charset 
= "GB2312";
    Response.AppendHeader(
"Content-Disposition""attachment;filename=FileName.xls");
    
// 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!
    Response.ContentEncoding = System.Text.Encoding.UTF7;
    Response.ContentType 
= "application/ms-excel";//设置输出文件类型为excel文件。 
    System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter oHtmlTextWriter 
= new System.Web.UI.HtmlTextWriter(oStringWriter);
    
this.GridView1.RenderControl(oHtmlTextWriter);
    Response.Output.Write(oStringWriter.ToString());
    Response.Flush();
    Response.End();

  }

  public override 
void VerifyRenderingInServerForm( Control control )
  
{ }
  protected 
void GridView1_RowDataBound( object sender, GridViewRowEventArgs e )
  
{
    
if (e.Row.RowType == DataControlRowType.DataRow)
    
{
      e.Row.Cells[
1].Attributes.Add("style""vnd.ms-excel.numberformat:@;");
    }

  }

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  
<title>将 GridView 导出到 Excel 文件中</title>
</head>
<body>
  
<form id="form1" runat="server">
    
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"
      AutoGenerateColumns
="false">
      
<Columns>
        
<asp:BoundField HeaderText="序号" DataField="id" />
        
<asp:BoundField HeaderText="身份证号" DataField="PkID" />
        
<asp:BoundField HeaderText="网址" DataField="Title" ReadOnly="true" HtmlEncode="false" />
      
</Columns>
    
</asp:GridView>
    
<asp:Literal ID="HiddenOut" runat="server" />
    
<asp:Button ID="Button1" runat="server" Text="导出" OnClick="Button1_Click" />
  
</form>
</body>
</html>

你可能感兴趣的:(GridView)