我的博客

asp.net 自学笔记及开发过程中的经验、技巧、摘录
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

将DataGrid输出到Excel文件(转)

Posted on 2006-05-04 14:15  Net_Learner  阅读(423)  评论(0)    收藏  举报
在Web From上输出数据到Excel有两种方法,一个是有数据库直接导出;另外一个方法是由DataGrid直接输出到Excel文件。下面得代码实现了这两个功能。注意:在使用时要引用Microsoft Office Web Components 9.0 COM组件,另外注意设置要保存文件得目录具有匿名可修改的权限。

DataGridToExcel.aspx
<%@ 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)

Web Form Designer Generated Code

  
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(11), xlsheet.Cells(1, i + 1)).Font.Bold = True
      xlsheet.Range(xlsheet.Cells(
11), 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(
22), xlsheet.Cells(j + 2, i + 1)).Font.Color = "blue"
        
'xlsheet.Range("A2:B14").WrapText = True
        xlsheet.Range(xlsheet.Cells(21), 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