如何在VB.Net中使用数据库查询创buildExcel文件?

我想在VB.Net中使用数据库查询生成一个Excel文件。 我该怎么做?

更确切地说,我想将一个查询绑定到一个Excel文件中,这样表格中的行就占据了一个新的Excel文件中相应的单元格,并将这个文件保存到我的电脑。 然后,将该文件发送给某人。

虽然我可以处理邮件的部分,但是这是我需要帮助的文件的创build。 任何人都知道如何实现我想达到的目标?

PS:我需要在VB.Net中执行此操作,并使用SQL Server 2008。

确定这不是完美的,但它应该让你开始。 首先,您需要添加对您正在使用的Excel版本的引用。 在我的情况下是12.0(2007),但是这个代码应该与最近的两个或三个版本一起工作,只需要稍微改变一两个。 在页面的顶部添加这个

导入Microsoft.Office.Interop

接下来添加一个函数来创build一个数据表

Public Function CreateTable() As DataTable Dim cn As New SqlConnection(My.Settings.con) Dim cmd As New SqlCommand Using da As New SqlDataAdapter() Dim dt As New DataTable() cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = "[dbo].[MyStoredProcedure]" cmd.CommandTimeout = 0 cn.Open() cmd.Connection = cn da.SelectCommand = cmd da.Fill(dt) cn.Close() Return dt End Using End Function 

接下来的代码将该DataTable并将其转储到Excel中。

 Public Shared Sub PopulateSheet(ByVal dt As DataTable, ByVal File As String) Dim oXL As Excel.Application = CType(CreateObject("Excel.Application"), Excel.Application) Dim oWB As Excel.Workbook Dim oSheet As Excel.Worksheet Dim oRng As Excel.Range oXL.Visible = True oWB = oXL.Workbooks.Add oSheet = CType(oWB.ActiveSheet, Excel.Worksheet) Dim dc As DataColumn Dim dr As DataRow Dim colIndex As Integer = 0 Dim rowIndex As Integer = 0 For Each dc In dt.Columns colIndex = colIndex + 1 oXL.Cells(1, colIndex) = dc.ColumnName Next For Each dr In dt.Rows rowIndex = rowIndex + 1 colIndex = 0 For Each dc In dt.Columns colIndex = colIndex + 1 oXL.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName) Next Next oSheet.Cells.Select() oSheet.Columns.AutoFit() oSheet.Rows.AutoFit() oXL.Visible = True oXL.UserControl = True oWB.SaveAs(File) oRng = Nothing oXL.Quit() ExcelCleanUp(oXL, oWB, oSheet) End Sub 

现在,您可以通过button或任何您select的事件来调用它

  Dim dt As New DataTable Try dt = CreateTable() PopulateSheet(dt, "c:\test\ExcelFile.xlsx") Catch ex As Exception MessageBox.Show(ex.Message) Finally dt.Dispose() End Try 

现在,这是非常基本的,但只要做一点工作,就可以进行单元格格式化,页面设置以及任何可以在Excel中使用菜单/选项完成的任何操作。

我们也应该通过添加代码来完成这项工作。

 Private Shared Sub ExcelCleanUp( _ ByVal oXL As Excel.Application, _ ByVal oWB As Excel.Workbook, _ ByVal oSheet As Excel.Worksheet) GC.Collect() GC.WaitForPendingFinalizers() Marshal.FinalReleaseComObject(oXL) Marshal.FinalReleaseComObject(oSheet) Marshal.FinalReleaseComObject(oWB) oSheet = Nothing oWB = Nothing oXL = Nothing End Sub 

您可以在VB.Net中自动执行Excel,并通过代码将这些值放入电子表格中:

你可以在CodeProject上find一些有关这方面的优秀文章:

使用XSL的Excel导出组件 :在本文中,您可以find一个组件来将数据导出到Excel而不使用任何Office组件。

使用VB.Net导出到Excel :在这个作者使用Excel自动化来完成这项工作。