Как экспортировать DataGridView в формат Excel в VB.NET - PullRequest
3 голосов
/ 29 ноября 2009

Я использую OLE для подключения к базе данных, используя VB.NET, и показываю результаты в DataGridView.
Я хочу экспортировать данные из DataGridView в файл формата Excel, т.е. пользователь может сохранить содержимое DataGridView в виде файла MS Excel.

Ответы [ 4 ]

2 голосов
/ 30 ноября 2009

Я обнаружил, что 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
0 голосов
/ 27 января 2015

Я проверил его и его работу для меня.

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
0 голосов
/ 05 октября 2013

Private Sub Button1_Click (отправитель ByVal как System.Object, ByVal e как System.EventArgs) Обрабатывает Button1.Click DATAGRIDVIEW_TO_EXCEL ((DataGridView1)) 'ПАРАМЕТР: ВАШЕ ДАННОЕ СВИДЕТЕЛЬСТВО End Sub

Частный Sub DATAGRIDVIEW_TO_EXCEL (ByVal DGV As DataGridView) Пытаться Dim DTB = новая таблица данных, RWS как целое число, CLS как целое число

    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

End Sub

0 голосов
/ 30 ноября 2009

Самый простой способ сделать это - использовать класс textfieldparser в microsoft.visualbasic.fileio ( msdn link ). Псевдокод будет:

создайте объект textfieldparser, установите файл для открытия (* .csv) и декодируйте.

напишите заголовки столбцов

цикл по представлению данных или его источнику данных распечатать в текстовый файл

Теперь пользователь может открыть файл в Excel.

Это мой быстрый ответ, я посмотрю, есть ли лучший способ сделать это.

...