Я использую OLE для подключения к базе данных с помощью VB.NET и показываю результаты в DataGridView.
Я хочу экспортировать данные, которые находятся в DataGridView, в файл формата Excel, т. Е. пользователь может сохранить содержимое DataGridView как файл MS Excel.
Как экспортировать DataGridView в формат Excel в VB.NET
Ответы (4)
Я обнаружил, что copyfromrecordset - самый быстрый способ.
Dim xlApp As New Excel.Application
Dim xlWBook As Excel.Workbook = xlApp.Workbooks.Add
Dim XlSheet As Excel.Worksheet = CType(xlWBook.Worksheets("Sheet1"), Excel.Worksheet)
With XlSheet
'insert column names
For i = 2 To dt.Columns.Count - 1
.Cells(1, i).value = dt.Columns(i - 1).ColumnName
Next
'insert the actual data
.Range("A2").CopyFromRecordset(datset)
End With
Самый простой способ сделать это - использовать класс textfieldparser в microsoft.visualbasic.fileio (ссылка msdn). Псевокод будет:
создать объект textfieldparser, настроить файл на открытие (* .csv) и декодировать.
напишите заголовки столбцов
цикл через datagridview или его источник данных печать в текстовый файл
Теперь пользователь может открыть файл в Excel.
Это мой быстрый ответ, я посмотрю, есть ли способ лучше.
Private Sub Button1_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Обрабатывает Button1.Click DATAGRIDVIEW_TO_EXCEL ((DataGridView1)) 'PARAMETER: YOUR DATAGRIDVIEW End Sub
Private Sub DATAGRIDVIEW_TO_EXCEL (ByVal DGV как DataGridView) Попробуйте Dim DTB = New DataTable, RWS as Integer, CLS as Integer
For CLS = 0 To DGV.ColumnCount - 1 ' COLUMNS OF DTB
DTB.Columns.Add(DGV.Columns(CLS).Name.ToString)
Next
Dim DRW As DataRow
For RWS = 0 To DGV.Rows.Count - 1 ' FILL DTB WITH DATAGRIDVIEW
DRW = DTB.NewRow
For CLS = 0 To DGV.ColumnCount - 1
Try
DRW(DTB.Columns(CLS).ColumnName.ToString) = DGV.Rows(RWS).Cells(CLS).Value.ToString
Catch ex As Exception
End Try
Next
DTB.Rows.Add(DRW)
Next
DTB.AcceptChanges()
Dim DST As New DataSet
DST.Tables.Add(DTB)
Dim FLE As String = "" ' PATH AND FILE NAME WHERE THE XML WIL BE CREATED (EXEMPLE: C:\REPS\XML.xml)
DTB.WriteXml(FLE)
Dim EXL As String = "" ' PATH OF/ EXCEL.EXE IN YOUR MICROSOFT OFFICE
Shell(Chr(34) & EXL & Chr(34) & " " & Chr(34) & FLE & Chr(34), vbNormalFocus) ' OPEN XML WITH EXCEL
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Конец подписки
Я протестировал его и его работу на себе.
Dim xlApp As Microsoft.Office.Interop.Excel.Application
Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook
Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
Dim misValue As Object = System.Reflection.Missing.Value
Dim i As Integer
Dim j As Integer
Try
xlApp = New Microsoft.Office.Interop.Excel.Application
xlApp.Application.DisplayAlerts = False
xlWorkBook = xlApp.Workbooks.Add(misValue)
xlWorkSheet = xlWorkBook.Sheets.Add()
xlWorkSheet.Name = "MysqlSheet"
For i = 0 To Form2.DataGridView2.RowCount - 1
For j = 0 To Form2.DataGridView2.ColumnCount - 1
For k As Integer = 1 To Form2.DataGridView2.Columns.Count
xlWorkSheet.Cells(1, k) = Form2.DataGridView2.Columns(k - 1).HeaderText
xlWorkSheet.Cells(i + 2, j + 1) = Form2.DataGridView2(j, i).Value
Next
Next
Next
xlWorkSheet.SaveAs("c:\") 'Where u want to save
xlWorkBook.Close()
xlApp.Quit()
Catch ex As Exception
MsgBox(ex.Message)
Finally
End Try