ОК, это не идеально, но это должно помочь вам начать. Прежде всего вы захотите добавить ссылку на версию Excel, которую вы используете. В моем случае это 12.0 (2007), но этот код должен работать с последними двумя или тремя версиями с небольшим изменением или двумя. Вверху вашей страницы добавьте это
Импортирует Microsoft.Office.Interop
Далее добавьте функцию для создания таблицы данных
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
Теперь вы можете вызвать его с помощью кнопки или любого другого события, которое вы выберете с помощью этого
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