现在的位置: 首页 > 综合 > 正文

将DataGrid输出到Excel文件

2013年01月29日 ⁄ 综合 ⁄ 共 4018字 ⁄ 字号 评论关闭

在Web From上输出数据到Excel有两种方法,一个是有数据库直接导出;另外一个方法是由DataGrid直接输出到Excel文件。下面得代码实现了这两个功能。注意:在使用时要引用Microsoft Office Web Components 9.0 COM组件,另外注意设置要保存文件得目录具有匿名可修改的权限。

DataGridToExcel.aspx

<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">





DataGridToExcel.aspx.vb

Imports System<br /> Imports System.Data<br /> Imports System.Data.OleDb<br /> Imports OWC</p> <p>Public Class DataGridToExcel<br /> Inherits System.Web.UI.Page<br /> Protected WithEvents xlfile As System.Web.UI.WebControls.TextBox<br /> Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid<br /> Protected WithEvents ExportDataGrid2Excel As System.Web.UI.WebControls.Button<br /> Protected WithEvents ExportDataBase2Excel As System.Web.UI.WebControls.Button<br /> Protected WithEvents Label1 As System.Web.UI.WebControls.Label<br /> Protected mengxianhui As New HtmlGenericControl()</p> <p> Private cnn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="_<br /> + Server.MapPath("Test.mdb"))<br /> Private sql As OleDbCommand = New OleDbCommand("SELECT TOP 50 Title,Author FROM Document", cnn)</p> <p>#Region " Web Form Designer Generated Code "</p> <p> 'This call is required by the Web Form Designer.<br /> <system.diagnostics.debuggerstepthrough> Private Sub InitializeComponent()</p> <p> End Sub</p> <p> Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs)_<br /> Handles MyBase.Init<br /> 'CODEGEN: This method call is required by the Web Form Designer<br /> 'Do not modify it using the code editor.<br /> InitializeComponent()<br /> End Sub</p> <p>#End Region</p> <p> Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)_<br /> Handles MyBase.Load<br /> Label1.Text = "请输入要保存得文件名字:"<br /> ExportDataGrid2Excel.Text = "由DataGrid生成Excel文件"<br /> ExportDataBase2Excel.Text = "数据库直接生成Excel文件"<br /> DataGrid1.Columns(0).HeaderStyle.HorizontalAlign = HorizontalAlign.Center<br /> DataGrid1.Columns(0).HeaderText = "文章名称"<br /> DataGrid1.Columns(1).HeaderText = "作者"<br /> DataGrid1.Columns(0).HeaderStyle.Font.Bold = True<br /> DataGrid1.Style.Add("font-size", "9pt")<br /> mengxianhui.InnerText = "【孟宪会之精彩世界】- 将DataGrid输出到Excel文件"<br /> Me.BindDataGrid()<br /> End Sub</p> <p> Private Sub BindDataGrid()<br /> cnn.Open()<br /> Dim reader As OleDbDataReader = sql.ExecuteReader()<br /> Me.DataGrid1.DataSource = reader<br /> Me.DataGrid1.DataBind()<br /> reader.Close()<br /> cnn.Close()<br /> End Sub</p> <p> Private Sub WriteDataGrid2Excel()<br /> Dim xlsheet As New SpreadsheetClass()<br /> cnn.Open()<br /> Dim reader As OleDbDataReader = Me.sql.ExecuteReader()<br /> Dim numbercols As Integer = reader.FieldCount<br /> Dim row As Integer = 2<br /> Dim i As Integer = 0<br /> ' 输出标题<br /> For i = 0 To numbercols - 1<br /> xlsheet.ActiveSheet.Cells(1, i + 1) = reader.GetName(i).ToString()<br /> Next</p> <p> ' 输出字段内容<br /> While (reader.Read())<br /> For i = 0 To numbercols - 1<br /> xlsheet.ActiveSheet.Cells(row, i + 1) = reader.GetValue(i).ToString()<br /> Next<br /> row = row + 1<br /> End While<br /> reader.Close()<br /> cnn.Close()<br /> Try<br /> xlsheet.ActiveSheet.Export(Server.MapPath(".") + "/Images/" + Me.xlfile.Text,_<br /> OWC.SheetExportActionEnum.ssExportActionNone)<br /> Catch e As System.Runtime.InteropServices.COMException<br /> Response.Write("错误:" + e.Message)<br /> End Try<br /> End Sub</p> <p> Private Sub WriteDataGrid2Excel2()<br /> Dim xlsheet As New SpreadsheetClass()<br /> Dim i As Integer = 0<br /> Dim j As Integer = 0<br /> 'Response.End()<br /> ' 输出标题<br /> Dim oItem As DataGridColumn<br /> For Each oItem In DataGrid1.Columns<br /> xlsheet.ActiveSheet.Cells(1, i + 1) = oItem.HeaderText<br /> 'xlsheet.ActiveSheet.Range(xlsheet.ActiveSheet.Cells(1, 1),_<br /> xlsheet.ActiveSheet.Cells(1, i + 1)).Font.Bold = True<br /> '设置格式<br /> xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i + 1)).Font.Bold = True<br /> xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i + 1)).Font.Color = "red"<br /> i = i + 1<br /> Next</p> <p> Dim numbercols As Integer = DataGrid1.Items.Item(0).Cells.Count<br /> ' 输出字段内容<br /> For j = 0 To DataGrid1.Items.Count - 1<br /> For i = 0 To numbercols - 1<br /> xlsheet.Range(xlsheet.Cells(2, 2), xlsheet.Cells(j + 2, i + 1)).Font.Color = "blue"<br /> 'xlsheet.Range("A2:B14").WrapText = True<br /> xlsheet.Range(xlsheet.Cells(2, 1), xlsheet.Cells(j + 2, i + 1)).AutoFitColumns()<br /> xlsheet.ActiveSheet.Cells(j + 2, i + 1) = DataGrid1.Items.Item(j).Cells(i).Text.Replace(" ", " ")<br /> Next<br /> Next<br /> Try<br /> xlsheet.ActiveSheet.Export(Server.MapPath(".") + "/Images/" + Me.xlfile.Text,_<br /> OWC.SheetExportActionEnum.ssExportActionNone)<br /> Catch e As System.Runtime.InteropServices.COMException<br /> Response.Write("错误:" + e.Message)<br /> End Try<br /> End Sub</p> <p> Private Sub ExportDataGrid2Excel_Click(ByVal sender As Object,_<br /> ByVal e As System.EventArgs) Handles ExportDataGrid2Excel.Click<br /> If (Me.xlfile.Text.Trim() "") Then<br /> Me.WriteDataGrid2Excel2()<br /> End If<br /> End Sub</p> <p> Private Sub ExportDataBase2Excel_Click(ByVal sender As Object, _<br /> ByVal e As System.EventArgs) Handles ExportDataBase2Excel.Click<br /> If (Me.xlfile.Text.Trim() "") Then<br /> Me.WriteDataGrid2Excel()<br /> End If<br /> End Sub</p> <p>End Class<br /> </system.diagnostics.debuggerstepthrough>

抱歉!评论已关闭.