如何将datagrid中得内容导出成excel,access等文件?

时间:2021-07-09 08:53:46
如何将datagrid中得内容导出成excel,access等文件,下载储存到客户端?

25 个解决方案

#1


http://dotnet.aspx.cc/ShowDetail.aspx@id=BF0A54F9-C7C7-4200-BD9A-802AC1F5DE50

#2


要实现讲datagrid中的数据导为excel,必须引入microsoft的microsoft office webComponent(OWC),从vs.net中引入OWC后,就可以实现将datagrid导为excel.具体的方法如下: 

#3


以下是c#代码文件: 
using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Data.SqlClient; 
using System.Drawing; 
using System.Web; 
using System.Web.SessionState; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.HtmlControls; 

namespace TestExeclFromDataGrid 

   /// <summary> 
   /// WebForm1 的摘要说明。 
   /// </summary> 
   public class WebForm1 : System.Web.UI.Page 
   { 
      protected System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1; 
      protected System.Data.SqlClient.SqlCommand sqlSelectCommand1; 
      protected System.Data.SqlClient.SqlConnection sqlConnection1; 
      protected TestExeclFromDataGrid.dsProdcuts dsProdcuts1; 
      protected System.Web.UI.WebControls.Button Button1; 
      protected System.Web.UI.WebControls.Label Label1; 
      protected System.Web.UI.WebControls.DataGrid DataGrid1; 
    
      private void Page_Load(object sender, System.EventArgs e) 
      { 
         this.sqlDataAdapter1.Fill(this.dsProdcuts1); 
         if(!Page.IsPostBack) 
         { 
            this.DataGrid1.DataBind(); 
         }// 在此处放置用户代码以初始化页面 
      } 
       
      public void DataGridToExcel() 
      { 
         string filesName=this.File1.Value; 
         OWC.SpreadsheetClass XlsSheet = new OWC.SpreadsheetClass();//实例化execl中的一张表 
         int tempColumn = 0; 
         foreach(System.Web.UI.WebControls.DataGridColumn Oitem in this.DataGrid1.Columns)//遍历整个datagrid的每一列,添加表头 
         { 
XlsSheet.ActiveSheet.Cells[1,tempColumn+1]=Oitem.HeaderText;//添加表头 
            tempColumn++; 
         } 
         for(int i=1;i <= this.DataGrid1.Items.Count;i++)//遍历datagrid中的每一行, 
         { 
            for(int j=1;j<=this.DataGrid1.Items[i-1].Cells.Count;j++) 
            { 
               XlsSheet.ActiveSheet.Cells[i+1,j]=this.DataGrid1.Items[i-1].Cells[j-1].Text;//给刚才定义好的excel表没格负值 
            } 
         } 
         XlsSheet.ActiveSheet.Export(filesName,OWC.SheetExportActionEnum.ssExportActionNone);//execl表格的导出 
      } 

      #region Web Form Designer generated code 
      override protected void OnInit(EventArgs e) 
      { 
         // 
         // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 
         // 
         InitializeComponent(); 
         base.OnInit(e); 
      } 
       
      /// <summary> 
      /// 设计器支持所需的方法 - 不要使用代码编辑器修改 
      /// 此方法的内容。 
      /// </summary> 
      private void InitializeComponent() 
      { 
         this.sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter(); 
         this.sqlSelectCommand1 = new System.Data.SqlClient.SqlCommand(); 
         this.sqlConnection1 = new System.Data.SqlClient.SqlConnection(); 
         this.dsProdcuts1 = new TestExeclFromDataGrid.dsProdcuts(); 
         ((System.ComponentModel.ISupportInitialize)(this.dsProdcuts1)).BeginInit(); 
         this.Button1.Click += new System.EventHandler(this.Button1_Click); 
         // 
         // sqlDataAdapter1 
         // 
         this.sqlDataAdapter1.SelectCommand = this.sqlSelectCommand1; 
         this.sqlDataAdapter1.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] { 
                                                                            new System.Data.Common.DataTableMapping("Table", "Products", new System.Data.Common.DataColumnMapping[] { 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("ProductID", "ProductID"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("ProductName", "ProductName"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("SupplierID", "SupplierID"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("CategoryID", "CategoryID"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("QuantityPerUnit", "QuantityPerUnit"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("UnitPrice", "UnitPrice"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("UnitsInStock", "UnitsInStock"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("UnitsOnOrder", "UnitsOnOrder"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("ReorderLevel", "ReorderLevel"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("Discontinued", "Discontinued")})}); 
         // 
         // sqlSelectCommand1 
         // 
         this.sqlSelectCommand1.CommandText = "SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice" + 
            ", UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued FROM Products"; 
         this.sqlSelectCommand1.Connection = this.sqlConnection1; 
         // 
         // sqlConnection1 
         // 
         this.sqlConnection1.ConnectionString = "data source=LVYIWEN;initial catalog=Northwind;integrated security=SSPI;persist se" + 
            "curity info=False;workstation id=LVYIWEN;packet size=4096"; 
         // 
         // dsProdcuts1 
         // 
         this.dsProdcuts1.DataSetName = "dsProdcuts"; 
         this.dsProdcuts1.Locale = new System.Globalization.CultureInfo("zh-CN"); 
         this.dsProdcuts1.Namespace = "http://www.tempuri.org/dsProdcuts.xsd"; 
         this.Load += new System.EventHandler(this.Page_Load); 
         ((System.ComponentModel.ISupportInitialize)(this.dsProdcuts1)).EndInit(); 

      } 
      #endregion 

      private void Button1_Click(object sender, System.EventArgs e) 
      { 
         DataGridToExcel(); 
      } 
   } 



#4


一下是asp.net代码: 
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="TestExeclFromDataGrid.WebForm1" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 
<HTML> 
   <HEAD> 
      <title>WebForm1</title> 
      <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> 
      <meta name="CODE_LANGUAGE" Content="C#"> 
      <meta name="vs_defaultClientScript" content="JavaScript"> 
      <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> 
   </HEAD> 
   <body MS_POSITIONING="GridLayout"> 
      <form id="Form1" method="post" runat="server"> 
         <asp:DataGrid id=DataGrid1 style="Z-INDEX: 101; LEFT: 88px; POSITION: absolute; TOP: 88px" runat="server" DataSource="<%# dsProdcuts1 %>" DataKeyField="CategoryID" DataMember="Products" AutoGenerateColumns="False"> 
            <Columns> 
               <asp:BoundColumn DataField="ProductID" SortExpression="ProductID" HeaderText="ProductID"></asp:BoundColumn> 
               <asp:BoundColumn DataField="ProductName" SortExpression="ProductName" HeaderText="ProductName"></asp:BoundColumn> 
               <asp:BoundColumn DataField="SupplierID" SortExpression="SupplierID" HeaderText="SupplierID"></asp:BoundColumn> 
               <asp:BoundColumn DataField="CategoryID" SortExpression="CategoryID" HeaderText="CategoryID"></asp:BoundColumn> 
               <asp:BoundColumn DataField="UnitPrice" SortExpression="UnitPrice" HeaderText="UnitPrice"></asp:BoundColumn> 
               <asp:BoundColumn DataField="UnitsInStock" SortExpression="UnitsInStock" HeaderText="UnitsInStock"></asp:BoundColumn> 
            </Columns> 
         </asp:DataGrid> 
         <asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 264px; POSITION: absolute; TOP: 280px" runat="server" Text="Button"></asp:Button> 
         <asp:Label id="Label1" style="Z-INDEX: 103; LEFT: 200px; POSITION: absolute; TOP: 32px" runat="server" Width="264px">将DataGrid的数据导为excel</asp:Label> 
      </form> 
   </body> 
</HTML>

#5


Response.ContentType = "application/vnd.ms-excel "
        ' 从Content-Type header中去除charset设置
        Response.Charset = ""
        Response.AddHeader("Content-Disposition", "attachment; filename=Export.xls")

        ' 关闭 ViewState
        Me.EnableViewState = False
        Dim tw As New System.IO.StringWriter
        Dim hw As New System.Web.UI.HtmlTextWriter(tw)
        ' 获取control的HTML
        DataGrid1.RenderControl(hw)
        ' 把HTML写回浏览器
        Response.ContentEncoding = System.Text.Encoding.UTF8
        Response.Write(tw.ToString())
        Response.End()

#6


導出為Excel的:
<%@ Page Language="VB" AutoEventWireup="True" Debug="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Color" %>

<html>
   <script runat="server">
     dim MyConnection as OleDbConnection
     dim cmdSelect as OleDbCommand
     dim dtrReader as OleDbDataReader
      Sub Page_Load(sender As Object, e As EventArgs) 
      MyConnection = New OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" + Server.MapPath(".")+"/datagrid.mdb")
         If Not IsPostBack Then 
            BindGrid()
         End If
      End Sub 

      Sub BindGrid() 
      Dim MyCommand As OleDbDataAdapter = new OleDbDataAdapter("select * from [news]", MyConnection)
          Dim DS As DataSet = new DataSet()
          MyCommand.Fill(DS,"min") 
          MyDataGrid.DataSource =DS.Tables("min").DefaultView
          MyDataGrid.DataBind()
      End Sub

Sub Mydatagrid_PageIndexChanged(s as object,e as DataGridPageChangedEventargs)
    MyDataGrid.CurrentPageIndex=e.newPageIndex
BindGrid()
End Sub

Sub Button1_Click(sender As Object, e As System.EventArgs)
'-------------------
MyDataGrid.AllowPaging = "false"
BindGrid()
'-------------------
      MyDataGrid.SelectedItemStyle.BackColor=Color.white
      MyDataGrid.AlternatingItemStyle.BackColor=Color.white
      MyDataGrid.ItemStyle.BackColor=Color.white
  MyDataGrid.HeaderStyle.BackColor=Color.white
  MyDataGrid.HeaderStyle.ForeColor=Color.red
  '----------
          dim resp as HttpResponse = Page.Response
          resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312")
  '---------
          Response.ContentType = "application/vnd.ms-excel"
          Response.Charset = ""
          Me.EnableViewState = False
          Dim tw As New System.IO.StringWriter()
          Dim hw As New System.Web.UI.HtmlTextWriter(tw)
          MyDataGrid.RenderControl(hw)
          Response.Write(tw.ToString())
          Response.End()
    '-------------------
    MyDataGrid.AllowPaging = "true"
BindGrid()
End Sub



</script>
<body>
   <form runat="server">
    <asp:Label id="lblFile" forecolor="red" runat="server"/><BR>
<asp:Button id="button1" onclick="Button1_Click" text="Write To Excle File" runat="server"/>
<BR>
      <asp:datagrid id="MyDataGrid" 
  runat="server" 
  CellPadding="4" 
  BackColor="White"
      BorderColor="#330033" 
  BorderWidth="1px" 
  BorderStyle="None" 
      Font-Size="9pt" 
  Font-Names="§&ordm;&Ecirc;^"
  AllowPaging="true" 
  pageSize="2" 
  OnPageIndexChanged="Mydatagrid_PageIndexChanged" >
  <PagerStyle Mode="NumericPages"
      Font-Bold="true" 
      BackColor="#F2F2F2"
      HorizontalAlign="right"> 
  </PagerStyle>
      <SelectedItemStyle  BackColor="#FFCC66"></SelectedItemStyle>
      <AlternatingItemStyle BackColor="#FFCC99"></AlternatingItemStyle>
      <ItemStyle BackColor="White"></ItemStyle>
      <HeaderStyle Font-Bold="True" HorizontalAlign="Center"  ForeColor="#330033" BorderColor="Black" BackColor="#FF9900"></HeaderStyle>
      </asp:datagrid>
   </form>
</body>
</html>

#7


To nnh,easyinter:你两好烦,不是来叫你们粘贴代码的,自己写的代码,粘那么多有什么意思,烦!!!真正到处就几行就行了,BabyTree写的就行了,但是有一个问题,就是在点了导出按扭后,
你保存了excel表后,在点"导出"按扭,就会有脚本错误,你页面有任何其他事件点击,也都有脚本错误出现,不知怎么解决.GZ!!!

#8


很轻松的一段代码
你在.cs文件中加入下面这个函数:public void ToExcel(System.Web.UI.Control ctl)  
{
// HttpContext.Current.Response.Charset ="GB2312";
HttpContext.Current.Response.Charset ="";
HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=money.xls");

HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.GetEncoding("GB2312"); 
HttpContext.Current.Response.ContentType ="application/ms-excel";//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword
ctl.Page.EnableViewState =false;
System.IO.StringWriter  tw = new System.IO.StringWriter() ;
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}

然后再调用:ToExcel(datagrid1)

#9


方法多的很,我有一个控件可以实现简单的DataGrid->Excel的导出不妨看看,是开源的!

www.foxhis.com/powermjtest/

#10


To:zengzhi318:我的那段代码就跟你写的是一样的,但是在你调用HttpContext.Current.Response.End();后,你下载保存execl内容,然后继续点击这个按扭或页面其他事件,都会有脚本错误的,但只要刷新页面就可以了,不知有什么办法解决这个问题?继续关注!

#11


关注

#12


参考:
http://dotnet.aspx.cc/ShowDetail.aspx?id=BF0A54F9-C7C7-4200-BD9A-802AC1F5DE50

#13


ppxeng (小鹏) :
真是狗咬吕洞宾,不识好人心,我看你才烦呢!

#14


:)

#15


必须引入microsoft的microsoft office webComponent control 9.0

#16


public void Export2Excel(Object Sender, EventArgs E)
    {
// 将当前查询的数据导入Excel中
    SqlConnection SqlConn = new SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);

// 设置为true,则在当前的数据上追加数据,否则,重写当前数据
    StreamWriter w = new StreamWriter(Server.MapPath("Data\\EmpInfoStaticResult.xls"), false, Encoding.Default);
    SqlConn.Open();

    try
    {
SqlCommand SqlCmd = SqlConn.CreateCommand();
SqlCmd.CommandText = Request["Param"];
SqlDataReader Reader = SqlCmd.ExecuteReader();
for (int i = 0; i < Reader.FieldCount; ++i)
{
w.Write(Reader.GetName(i));
w.Write('\t');
}
w.Write("\r\n");
object[] values = new object[Reader.FieldCount];
while (Reader.Read())
{
 Reader.GetValues(values);
 for (int i = 0; i < values.Length; ++i)
 {
w.Write( values[i].ToString());
w.Write('\t');
 }
 w.Write("\r\n");
}
w.Flush(); 
w.Close();
Reader.Close();
SqlConn.Close();
Response.Redirect ("Data\\EmpInfoStaticResult.xls");
    }
    catch
    {
w.Close();
SqlConn.Close();
return;
    }
   }

#17


顶!

#18


Response.Clear(); 
Response.ContentType = "application/vnd.ms-excel";//octet-stream
Response.AddHeader("Content-Disposition","attachment; filename=Report.xls");
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.Default;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
DataGrid1.RenderControl(hw);
Response.Write(tw.ToString());
Response.End(

#19


关注,学习

#20


to andrawsky:我的那段代码就是这样写的,但是点 下载保存后,你再次点击该按牛或其他事件按牛,他会破坏脚本代码!是不是还有什么方法呀?继续关注!

#21


关注!帮顶

#22


大家用过这个页面上的“保存”功能吗?会出现一个对话框选择保存位置和文件类型输入文件名。我希望datagrid得保存也像这样显出现对话框保存到本地,有人做过这种吗?
另外谁能解释一下这个页的保存功能是怎么做的?

#23


使用这种方法只能导出当前页的内容,其他的导出不了。

#24



#25


<%@ Page Language="vb" EnableViewState="False" AutoEventWireup="false" Codebehind="DataGridToExcel.aspx.vb"
 Inherits="aspxWeb.mengxianhui.com.DataGridToExcel"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title id="mengxianhui" runat="server"></title>
    <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
    <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  </HEAD>
  <body MS_POSITIONING="GridLayout" style="FONT-SIZE:9pt">
    <form id="Form1" method="post" runat="server">
      <asp:Label id="Label1" runat="server"></asp:Label>
      <asp:TextBox ID="xlfile" Runat="server"></asp:TextBox>
      <br>
      <br>
      <asp:Button ID="ExportDataBase2Excel" Runat="server" />
      <asp:Button ID="ExportDataGrid2Excel" Runat="server" />
      <br>
      <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" BorderColor="#CC9966"
       BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="4">
        <ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
        <HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
        <Columns>
          <asp:BoundColumn DataField="Title"></asp:BoundColumn>
          <asp:BoundColumn DataField="Author"></asp:BoundColumn>
        </Columns>
      </asp:DataGrid>
    </form>
  </body>
</HTML>

DataGridToExcel.aspx.vb

Imports System
Imports System.Data
Imports System.Data.OleDb
Imports OWC

Public Class DataGridToExcel
  Inherits System.Web.UI.Page
  Protected WithEvents xlfile As System.Web.UI.WebControls.TextBox
  Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
  Protected WithEvents ExportDataGrid2Excel As System.Web.UI.WebControls.Button
  Protected WithEvents ExportDataBase2Excel As System.Web.UI.WebControls.Button
  Protected WithEvents Label1 As System.Web.UI.WebControls.Label
  Protected mengxianhui As New HtmlGenericControl()

  Private cnn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="_
   + Server.MapPath("Test.mdb"))
  Private sql As OleDbCommand = New OleDbCommand("SELECT TOP 50 Title,Author FROM Document", cnn)

#Region " Web Form Designer Generated Code "

  'This call is required by the Web Form Designer.
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

  End Sub

  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs)_
   Handles MyBase.Init
    'CODEGEN: This method call is required by the Web Form Designer
    'Do not modify it using the code editor.
    InitializeComponent()
  End Sub

#End Region

  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)_
   Handles MyBase.Load
    Label1.Text = "请输入要保存得文件名字:"
    ExportDataGrid2Excel.Text = "由DataGrid生成Excel文件"
    ExportDataBase2Excel.Text = "数据库直接生成Excel文件"
    DataGrid1.Columns(0).HeaderStyle.HorizontalAlign = HorizontalAlign.Center
    DataGrid1.Columns(0).HeaderText = "文章名称"
    DataGrid1.Columns(1).HeaderText = "作者"
    DataGrid1.Columns(0).HeaderStyle.Font.Bold = True
    DataGrid1.Style.Add("font-size", "9pt")
    mengxianhui.InnerText = "【孟宪会之精彩世界】- 将DataGrid输出到Excel文件"
    Me.BindDataGrid()
  End Sub

  Private Sub BindDataGrid()
    cnn.Open()
    Dim reader As OleDbDataReader = sql.ExecuteReader()
    Me.DataGrid1.DataSource = reader
    Me.DataGrid1.DataBind()
    reader.Close()
    cnn.Close()
  End Sub

  Private Sub WriteDataGrid2Excel()
    Dim xlsheet As New SpreadsheetClass()
    cnn.Open()
    Dim reader As OleDbDataReader = Me.sql.ExecuteReader()
    Dim numbercols As Integer = reader.FieldCount
    Dim row As Integer = 2
    Dim i As Integer = 0
    ' 输出标题
    For i = 0 To numbercols - 1
      xlsheet.ActiveSheet.Cells(1, i + 1) = reader.GetName(i).ToString()
    Next

    ' 输出字段内容
    While (reader.Read())
      For i = 0 To numbercols - 1
        xlsheet.ActiveSheet.Cells(row, i + 1) = reader.GetValue(i).ToString()
      Next
      row = row + 1
    End While
    reader.Close()
    cnn.Close()
    Try
      xlsheet.ActiveSheet.Export(Server.MapPath(".") + "\Images\" + Me.xlfile.Text,_
       OWC.SheetExportActionEnum.ssExportActionNone)
    Catch e As System.Runtime.InteropServices.COMException
      Response.Write("错误:" + e.Message)
    End Try
  End Sub

  Private Sub WriteDataGrid2Excel2()
    Dim xlsheet As New SpreadsheetClass()
    Dim i As Integer = 0
    Dim j As Integer = 0
    'Response.End()
    ' 输出标题
    Dim oItem As DataGridColumn
    For Each oItem In DataGrid1.Columns
      xlsheet.ActiveSheet.Cells(1, i + 1) = oItem.HeaderText
      'xlsheet.ActiveSheet.Range(xlsheet.ActiveSheet.Cells(1, 1),_
       xlsheet.ActiveSheet.Cells(1, i + 1)).Font.Bold = True
      '设置格式
      xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i + 1)).Font.Bold = True
      xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i + 1)).Font.Color = "red"
      i = i + 1
    Next

    Dim numbercols As Integer = DataGrid1.Items.Item(0).Cells.Count
    ' 输出字段内容
    For j = 0 To DataGrid1.Items.Count - 1
      For i = 0 To numbercols - 1
        xlsheet.Range(xlsheet.Cells(2, 2), xlsheet.Cells(j + 2, i + 1)).Font.Color = "blue"
        'xlsheet.Range("A2:B14").WrapText = True
        xlsheet.Range(xlsheet.Cells(2, 1), xlsheet.Cells(j + 2, i + 1)).AutoFitColumns()
        xlsheet.ActiveSheet.Cells(j + 2, i + 1) = DataGrid1.Items.Item(j).Cells(i).Text.Replace("&nbsp;", " ")
      Next
    Next
    Try
      xlsheet.ActiveSheet.Export(Server.MapPath(".") + "\Images\" + Me.xlfile.Text,_
       OWC.SheetExportActionEnum.ssExportActionNone)
    Catch e As System.Runtime.InteropServices.COMException
      Response.Write("错误:" + e.Message)
    End Try
  End Sub

  Private Sub ExportDataGrid2Excel_Click(ByVal sender As Object,_
   ByVal e As System.EventArgs) Handles ExportDataGrid2Excel.Click
    If (Me.xlfile.Text.Trim() <> "") Then
      Me.WriteDataGrid2Excel2()
    End If
  End Sub

  Private Sub ExportDataBase2Excel_Click(ByVal sender As Object, _
   ByVal e As System.EventArgs) Handles ExportDataBase2Excel.Click
    If (Me.xlfile.Text.Trim() <> "") Then
      Me.WriteDataGrid2Excel()
    End If
  End Sub

End Class

#1


http://dotnet.aspx.cc/ShowDetail.aspx@id=BF0A54F9-C7C7-4200-BD9A-802AC1F5DE50

#2


要实现讲datagrid中的数据导为excel,必须引入microsoft的microsoft office webComponent(OWC),从vs.net中引入OWC后,就可以实现将datagrid导为excel.具体的方法如下: 

#3


以下是c#代码文件: 
using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Data.SqlClient; 
using System.Drawing; 
using System.Web; 
using System.Web.SessionState; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.HtmlControls; 

namespace TestExeclFromDataGrid 

   /// <summary> 
   /// WebForm1 的摘要说明。 
   /// </summary> 
   public class WebForm1 : System.Web.UI.Page 
   { 
      protected System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1; 
      protected System.Data.SqlClient.SqlCommand sqlSelectCommand1; 
      protected System.Data.SqlClient.SqlConnection sqlConnection1; 
      protected TestExeclFromDataGrid.dsProdcuts dsProdcuts1; 
      protected System.Web.UI.WebControls.Button Button1; 
      protected System.Web.UI.WebControls.Label Label1; 
      protected System.Web.UI.WebControls.DataGrid DataGrid1; 
    
      private void Page_Load(object sender, System.EventArgs e) 
      { 
         this.sqlDataAdapter1.Fill(this.dsProdcuts1); 
         if(!Page.IsPostBack) 
         { 
            this.DataGrid1.DataBind(); 
         }// 在此处放置用户代码以初始化页面 
      } 
       
      public void DataGridToExcel() 
      { 
         string filesName=this.File1.Value; 
         OWC.SpreadsheetClass XlsSheet = new OWC.SpreadsheetClass();//实例化execl中的一张表 
         int tempColumn = 0; 
         foreach(System.Web.UI.WebControls.DataGridColumn Oitem in this.DataGrid1.Columns)//遍历整个datagrid的每一列,添加表头 
         { 
XlsSheet.ActiveSheet.Cells[1,tempColumn+1]=Oitem.HeaderText;//添加表头 
            tempColumn++; 
         } 
         for(int i=1;i <= this.DataGrid1.Items.Count;i++)//遍历datagrid中的每一行, 
         { 
            for(int j=1;j<=this.DataGrid1.Items[i-1].Cells.Count;j++) 
            { 
               XlsSheet.ActiveSheet.Cells[i+1,j]=this.DataGrid1.Items[i-1].Cells[j-1].Text;//给刚才定义好的excel表没格负值 
            } 
         } 
         XlsSheet.ActiveSheet.Export(filesName,OWC.SheetExportActionEnum.ssExportActionNone);//execl表格的导出 
      } 

      #region Web Form Designer generated code 
      override protected void OnInit(EventArgs e) 
      { 
         // 
         // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 
         // 
         InitializeComponent(); 
         base.OnInit(e); 
      } 
       
      /// <summary> 
      /// 设计器支持所需的方法 - 不要使用代码编辑器修改 
      /// 此方法的内容。 
      /// </summary> 
      private void InitializeComponent() 
      { 
         this.sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter(); 
         this.sqlSelectCommand1 = new System.Data.SqlClient.SqlCommand(); 
         this.sqlConnection1 = new System.Data.SqlClient.SqlConnection(); 
         this.dsProdcuts1 = new TestExeclFromDataGrid.dsProdcuts(); 
         ((System.ComponentModel.ISupportInitialize)(this.dsProdcuts1)).BeginInit(); 
         this.Button1.Click += new System.EventHandler(this.Button1_Click); 
         // 
         // sqlDataAdapter1 
         // 
         this.sqlDataAdapter1.SelectCommand = this.sqlSelectCommand1; 
         this.sqlDataAdapter1.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] { 
                                                                            new System.Data.Common.DataTableMapping("Table", "Products", new System.Data.Common.DataColumnMapping[] { 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("ProductID", "ProductID"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("ProductName", "ProductName"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("SupplierID", "SupplierID"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("CategoryID", "CategoryID"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("QuantityPerUnit", "QuantityPerUnit"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("UnitPrice", "UnitPrice"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("UnitsInStock", "UnitsInStock"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("UnitsOnOrder", "UnitsOnOrder"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("ReorderLevel", "ReorderLevel"), 
                                                                                                                                                             new System.Data.Common.DataColumnMapping("Discontinued", "Discontinued")})}); 
         // 
         // sqlSelectCommand1 
         // 
         this.sqlSelectCommand1.CommandText = "SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice" + 
            ", UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued FROM Products"; 
         this.sqlSelectCommand1.Connection = this.sqlConnection1; 
         // 
         // sqlConnection1 
         // 
         this.sqlConnection1.ConnectionString = "data source=LVYIWEN;initial catalog=Northwind;integrated security=SSPI;persist se" + 
            "curity info=False;workstation id=LVYIWEN;packet size=4096"; 
         // 
         // dsProdcuts1 
         // 
         this.dsProdcuts1.DataSetName = "dsProdcuts"; 
         this.dsProdcuts1.Locale = new System.Globalization.CultureInfo("zh-CN"); 
         this.dsProdcuts1.Namespace = "http://www.tempuri.org/dsProdcuts.xsd"; 
         this.Load += new System.EventHandler(this.Page_Load); 
         ((System.ComponentModel.ISupportInitialize)(this.dsProdcuts1)).EndInit(); 

      } 
      #endregion 

      private void Button1_Click(object sender, System.EventArgs e) 
      { 
         DataGridToExcel(); 
      } 
   } 



#4


一下是asp.net代码: 
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="TestExeclFromDataGrid.WebForm1" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 
<HTML> 
   <HEAD> 
      <title>WebForm1</title> 
      <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> 
      <meta name="CODE_LANGUAGE" Content="C#"> 
      <meta name="vs_defaultClientScript" content="JavaScript"> 
      <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> 
   </HEAD> 
   <body MS_POSITIONING="GridLayout"> 
      <form id="Form1" method="post" runat="server"> 
         <asp:DataGrid id=DataGrid1 style="Z-INDEX: 101; LEFT: 88px; POSITION: absolute; TOP: 88px" runat="server" DataSource="<%# dsProdcuts1 %>" DataKeyField="CategoryID" DataMember="Products" AutoGenerateColumns="False"> 
            <Columns> 
               <asp:BoundColumn DataField="ProductID" SortExpression="ProductID" HeaderText="ProductID"></asp:BoundColumn> 
               <asp:BoundColumn DataField="ProductName" SortExpression="ProductName" HeaderText="ProductName"></asp:BoundColumn> 
               <asp:BoundColumn DataField="SupplierID" SortExpression="SupplierID" HeaderText="SupplierID"></asp:BoundColumn> 
               <asp:BoundColumn DataField="CategoryID" SortExpression="CategoryID" HeaderText="CategoryID"></asp:BoundColumn> 
               <asp:BoundColumn DataField="UnitPrice" SortExpression="UnitPrice" HeaderText="UnitPrice"></asp:BoundColumn> 
               <asp:BoundColumn DataField="UnitsInStock" SortExpression="UnitsInStock" HeaderText="UnitsInStock"></asp:BoundColumn> 
            </Columns> 
         </asp:DataGrid> 
         <asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 264px; POSITION: absolute; TOP: 280px" runat="server" Text="Button"></asp:Button> 
         <asp:Label id="Label1" style="Z-INDEX: 103; LEFT: 200px; POSITION: absolute; TOP: 32px" runat="server" Width="264px">将DataGrid的数据导为excel</asp:Label> 
      </form> 
   </body> 
</HTML>

#5


Response.ContentType = "application/vnd.ms-excel "
        ' 从Content-Type header中去除charset设置
        Response.Charset = ""
        Response.AddHeader("Content-Disposition", "attachment; filename=Export.xls")

        ' 关闭 ViewState
        Me.EnableViewState = False
        Dim tw As New System.IO.StringWriter
        Dim hw As New System.Web.UI.HtmlTextWriter(tw)
        ' 获取control的HTML
        DataGrid1.RenderControl(hw)
        ' 把HTML写回浏览器
        Response.ContentEncoding = System.Text.Encoding.UTF8
        Response.Write(tw.ToString())
        Response.End()

#6


導出為Excel的:
<%@ Page Language="VB" AutoEventWireup="True" Debug="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Color" %>

<html>
   <script runat="server">
     dim MyConnection as OleDbConnection
     dim cmdSelect as OleDbCommand
     dim dtrReader as OleDbDataReader
      Sub Page_Load(sender As Object, e As EventArgs) 
      MyConnection = New OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" + Server.MapPath(".")+"/datagrid.mdb")
         If Not IsPostBack Then 
            BindGrid()
         End If
      End Sub 

      Sub BindGrid() 
      Dim MyCommand As OleDbDataAdapter = new OleDbDataAdapter("select * from [news]", MyConnection)
          Dim DS As DataSet = new DataSet()
          MyCommand.Fill(DS,"min") 
          MyDataGrid.DataSource =DS.Tables("min").DefaultView
          MyDataGrid.DataBind()
      End Sub

Sub Mydatagrid_PageIndexChanged(s as object,e as DataGridPageChangedEventargs)
    MyDataGrid.CurrentPageIndex=e.newPageIndex
BindGrid()
End Sub

Sub Button1_Click(sender As Object, e As System.EventArgs)
'-------------------
MyDataGrid.AllowPaging = "false"
BindGrid()
'-------------------
      MyDataGrid.SelectedItemStyle.BackColor=Color.white
      MyDataGrid.AlternatingItemStyle.BackColor=Color.white
      MyDataGrid.ItemStyle.BackColor=Color.white
  MyDataGrid.HeaderStyle.BackColor=Color.white
  MyDataGrid.HeaderStyle.ForeColor=Color.red
  '----------
          dim resp as HttpResponse = Page.Response
          resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312")
  '---------
          Response.ContentType = "application/vnd.ms-excel"
          Response.Charset = ""
          Me.EnableViewState = False
          Dim tw As New System.IO.StringWriter()
          Dim hw As New System.Web.UI.HtmlTextWriter(tw)
          MyDataGrid.RenderControl(hw)
          Response.Write(tw.ToString())
          Response.End()
    '-------------------
    MyDataGrid.AllowPaging = "true"
BindGrid()
End Sub



</script>
<body>
   <form runat="server">
    <asp:Label id="lblFile" forecolor="red" runat="server"/><BR>
<asp:Button id="button1" onclick="Button1_Click" text="Write To Excle File" runat="server"/>
<BR>
      <asp:datagrid id="MyDataGrid" 
  runat="server" 
  CellPadding="4" 
  BackColor="White"
      BorderColor="#330033" 
  BorderWidth="1px" 
  BorderStyle="None" 
      Font-Size="9pt" 
  Font-Names="§&ordm;&Ecirc;^"
  AllowPaging="true" 
  pageSize="2" 
  OnPageIndexChanged="Mydatagrid_PageIndexChanged" >
  <PagerStyle Mode="NumericPages"
      Font-Bold="true" 
      BackColor="#F2F2F2"
      HorizontalAlign="right"> 
  </PagerStyle>
      <SelectedItemStyle  BackColor="#FFCC66"></SelectedItemStyle>
      <AlternatingItemStyle BackColor="#FFCC99"></AlternatingItemStyle>
      <ItemStyle BackColor="White"></ItemStyle>
      <HeaderStyle Font-Bold="True" HorizontalAlign="Center"  ForeColor="#330033" BorderColor="Black" BackColor="#FF9900"></HeaderStyle>
      </asp:datagrid>
   </form>
</body>
</html>

#7


To nnh,easyinter:你两好烦,不是来叫你们粘贴代码的,自己写的代码,粘那么多有什么意思,烦!!!真正到处就几行就行了,BabyTree写的就行了,但是有一个问题,就是在点了导出按扭后,
你保存了excel表后,在点"导出"按扭,就会有脚本错误,你页面有任何其他事件点击,也都有脚本错误出现,不知怎么解决.GZ!!!

#8


很轻松的一段代码
你在.cs文件中加入下面这个函数:public void ToExcel(System.Web.UI.Control ctl)  
{
// HttpContext.Current.Response.Charset ="GB2312";
HttpContext.Current.Response.Charset ="";
HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=money.xls");

HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.GetEncoding("GB2312"); 
HttpContext.Current.Response.ContentType ="application/ms-excel";//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword
ctl.Page.EnableViewState =false;
System.IO.StringWriter  tw = new System.IO.StringWriter() ;
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}

然后再调用:ToExcel(datagrid1)

#9


方法多的很,我有一个控件可以实现简单的DataGrid->Excel的导出不妨看看,是开源的!

www.foxhis.com/powermjtest/

#10


To:zengzhi318:我的那段代码就跟你写的是一样的,但是在你调用HttpContext.Current.Response.End();后,你下载保存execl内容,然后继续点击这个按扭或页面其他事件,都会有脚本错误的,但只要刷新页面就可以了,不知有什么办法解决这个问题?继续关注!

#11


关注

#12


参考:
http://dotnet.aspx.cc/ShowDetail.aspx?id=BF0A54F9-C7C7-4200-BD9A-802AC1F5DE50

#13


ppxeng (小鹏) :
真是狗咬吕洞宾,不识好人心,我看你才烦呢!

#14


:)

#15


必须引入microsoft的microsoft office webComponent control 9.0

#16


public void Export2Excel(Object Sender, EventArgs E)
    {
// 将当前查询的数据导入Excel中
    SqlConnection SqlConn = new SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);

// 设置为true,则在当前的数据上追加数据,否则,重写当前数据
    StreamWriter w = new StreamWriter(Server.MapPath("Data\\EmpInfoStaticResult.xls"), false, Encoding.Default);
    SqlConn.Open();

    try
    {
SqlCommand SqlCmd = SqlConn.CreateCommand();
SqlCmd.CommandText = Request["Param"];
SqlDataReader Reader = SqlCmd.ExecuteReader();
for (int i = 0; i < Reader.FieldCount; ++i)
{
w.Write(Reader.GetName(i));
w.Write('\t');
}
w.Write("\r\n");
object[] values = new object[Reader.FieldCount];
while (Reader.Read())
{
 Reader.GetValues(values);
 for (int i = 0; i < values.Length; ++i)
 {
w.Write( values[i].ToString());
w.Write('\t');
 }
 w.Write("\r\n");
}
w.Flush(); 
w.Close();
Reader.Close();
SqlConn.Close();
Response.Redirect ("Data\\EmpInfoStaticResult.xls");
    }
    catch
    {
w.Close();
SqlConn.Close();
return;
    }
   }

#17


顶!

#18


Response.Clear(); 
Response.ContentType = "application/vnd.ms-excel";//octet-stream
Response.AddHeader("Content-Disposition","attachment; filename=Report.xls");
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.Default;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
DataGrid1.RenderControl(hw);
Response.Write(tw.ToString());
Response.End(

#19


关注,学习

#20


to andrawsky:我的那段代码就是这样写的,但是点 下载保存后,你再次点击该按牛或其他事件按牛,他会破坏脚本代码!是不是还有什么方法呀?继续关注!

#21


关注!帮顶

#22


大家用过这个页面上的“保存”功能吗?会出现一个对话框选择保存位置和文件类型输入文件名。我希望datagrid得保存也像这样显出现对话框保存到本地,有人做过这种吗?
另外谁能解释一下这个页的保存功能是怎么做的?

#23


使用这种方法只能导出当前页的内容,其他的导出不了。

#24



#25


<%@ Page Language="vb" EnableViewState="False" AutoEventWireup="false" Codebehind="DataGridToExcel.aspx.vb"
 Inherits="aspxWeb.mengxianhui.com.DataGridToExcel"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title id="mengxianhui" runat="server"></title>
    <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
    <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  </HEAD>
  <body MS_POSITIONING="GridLayout" style="FONT-SIZE:9pt">
    <form id="Form1" method="post" runat="server">
      <asp:Label id="Label1" runat="server"></asp:Label>
      <asp:TextBox ID="xlfile" Runat="server"></asp:TextBox>
      <br>
      <br>
      <asp:Button ID="ExportDataBase2Excel" Runat="server" />
      <asp:Button ID="ExportDataGrid2Excel" Runat="server" />
      <br>
      <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" BorderColor="#CC9966"
       BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="4">
        <ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
        <HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
        <Columns>
          <asp:BoundColumn DataField="Title"></asp:BoundColumn>
          <asp:BoundColumn DataField="Author"></asp:BoundColumn>
        </Columns>
      </asp:DataGrid>
    </form>
  </body>
</HTML>

DataGridToExcel.aspx.vb

Imports System
Imports System.Data
Imports System.Data.OleDb
Imports OWC

Public Class DataGridToExcel
  Inherits System.Web.UI.Page
  Protected WithEvents xlfile As System.Web.UI.WebControls.TextBox
  Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
  Protected WithEvents ExportDataGrid2Excel As System.Web.UI.WebControls.Button
  Protected WithEvents ExportDataBase2Excel As System.Web.UI.WebControls.Button
  Protected WithEvents Label1 As System.Web.UI.WebControls.Label
  Protected mengxianhui As New HtmlGenericControl()

  Private cnn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="_
   + Server.MapPath("Test.mdb"))
  Private sql As OleDbCommand = New OleDbCommand("SELECT TOP 50 Title,Author FROM Document", cnn)

#Region " Web Form Designer Generated Code "

  'This call is required by the Web Form Designer.
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

  End Sub

  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs)_
   Handles MyBase.Init
    'CODEGEN: This method call is required by the Web Form Designer
    'Do not modify it using the code editor.
    InitializeComponent()
  End Sub

#End Region

  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)_
   Handles MyBase.Load
    Label1.Text = "请输入要保存得文件名字:"
    ExportDataGrid2Excel.Text = "由DataGrid生成Excel文件"
    ExportDataBase2Excel.Text = "数据库直接生成Excel文件"
    DataGrid1.Columns(0).HeaderStyle.HorizontalAlign = HorizontalAlign.Center
    DataGrid1.Columns(0).HeaderText = "文章名称"
    DataGrid1.Columns(1).HeaderText = "作者"
    DataGrid1.Columns(0).HeaderStyle.Font.Bold = True
    DataGrid1.Style.Add("font-size", "9pt")
    mengxianhui.InnerText = "【孟宪会之精彩世界】- 将DataGrid输出到Excel文件"
    Me.BindDataGrid()
  End Sub

  Private Sub BindDataGrid()
    cnn.Open()
    Dim reader As OleDbDataReader = sql.ExecuteReader()
    Me.DataGrid1.DataSource = reader
    Me.DataGrid1.DataBind()
    reader.Close()
    cnn.Close()
  End Sub

  Private Sub WriteDataGrid2Excel()
    Dim xlsheet As New SpreadsheetClass()
    cnn.Open()
    Dim reader As OleDbDataReader = Me.sql.ExecuteReader()
    Dim numbercols As Integer = reader.FieldCount
    Dim row As Integer = 2
    Dim i As Integer = 0
    ' 输出标题
    For i = 0 To numbercols - 1
      xlsheet.ActiveSheet.Cells(1, i + 1) = reader.GetName(i).ToString()
    Next

    ' 输出字段内容
    While (reader.Read())
      For i = 0 To numbercols - 1
        xlsheet.ActiveSheet.Cells(row, i + 1) = reader.GetValue(i).ToString()
      Next
      row = row + 1
    End While
    reader.Close()
    cnn.Close()
    Try
      xlsheet.ActiveSheet.Export(Server.MapPath(".") + "\Images\" + Me.xlfile.Text,_
       OWC.SheetExportActionEnum.ssExportActionNone)
    Catch e As System.Runtime.InteropServices.COMException
      Response.Write("错误:" + e.Message)
    End Try
  End Sub

  Private Sub WriteDataGrid2Excel2()
    Dim xlsheet As New SpreadsheetClass()
    Dim i As Integer = 0
    Dim j As Integer = 0
    'Response.End()
    ' 输出标题
    Dim oItem As DataGridColumn
    For Each oItem In DataGrid1.Columns
      xlsheet.ActiveSheet.Cells(1, i + 1) = oItem.HeaderText
      'xlsheet.ActiveSheet.Range(xlsheet.ActiveSheet.Cells(1, 1),_
       xlsheet.ActiveSheet.Cells(1, i + 1)).Font.Bold = True
      '设置格式
      xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i + 1)).Font.Bold = True
      xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i + 1)).Font.Color = "red"
      i = i + 1
    Next

    Dim numbercols As Integer = DataGrid1.Items.Item(0).Cells.Count
    ' 输出字段内容
    For j = 0 To DataGrid1.Items.Count - 1
      For i = 0 To numbercols - 1
        xlsheet.Range(xlsheet.Cells(2, 2), xlsheet.Cells(j + 2, i + 1)).Font.Color = "blue"
        'xlsheet.Range("A2:B14").WrapText = True
        xlsheet.Range(xlsheet.Cells(2, 1), xlsheet.Cells(j + 2, i + 1)).AutoFitColumns()
        xlsheet.ActiveSheet.Cells(j + 2, i + 1) = DataGrid1.Items.Item(j).Cells(i).Text.Replace("&nbsp;", " ")
      Next
    Next
    Try
      xlsheet.ActiveSheet.Export(Server.MapPath(".") + "\Images\" + Me.xlfile.Text,_
       OWC.SheetExportActionEnum.ssExportActionNone)
    Catch e As System.Runtime.InteropServices.COMException
      Response.Write("错误:" + e.Message)
    End Try
  End Sub

  Private Sub ExportDataGrid2Excel_Click(ByVal sender As Object,_
   ByVal e As System.EventArgs) Handles ExportDataGrid2Excel.Click
    If (Me.xlfile.Text.Trim() <> "") Then
      Me.WriteDataGrid2Excel2()
    End If
  End Sub

  Private Sub ExportDataBase2Excel_Click(ByVal sender As Object, _
   ByVal e As System.EventArgs) Handles ExportDataBase2Excel.Click
    If (Me.xlfile.Text.Trim() <> "") Then
      Me.WriteDataGrid2Excel()
    End If
  End Sub

End Class