Экспорт более 2000 строк данных из сетки данных в файл Excel на vb.net - PullRequest
0 голосов
/ 15 апреля 2020

Мне удалось экспортировать данные из DataGridView в файл Excel с помощью al oop и записи по ячейкам, но проблема в том, что у меня более 2000 строк, поэтому процесс экспорта занимает много времени. Мой вопрос: есть ли что изменить, чтобы я мог минимизировать время экспорта? Спасибо

'exporter
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    xlApp = New Excel.Application
    xlBook = xlApp.Workbooks.Open(Filename:=Path.Combine(Application.StartupPath, "EMP_.xlsx"), IgnoreReadOnlyRecommended:=True, ReadOnly:=False, Editable:=True)
    xlSheet = xlBook.Worksheets(1)
    If DataGridView1.DataSource IsNot Nothing Then
        Dim i, j As Integer
        For i = 1 To DataGridView1.RowCount - 1
            For j = 1 To DataGridView1.ColumnCount
                xlSheet.Cells(i + 1, j) = DataGridView1.Rows(i - 1).Cells(j - 1).Value
            Next
        Next
        xlApp.Visible = True
        xlApp.UserControl = True
        xlApp.Quit()
        xlApp = Nothing
    Else
        MsgBox("Le tableau est vide")
    End If
End Sub

1 Ответ

0 голосов
/ 15 апреля 2020

Не уверен, что это что-то тоже может быть открыто. Случайно, если вы сможете загрузить свой DataGridView, установив DataSource DataGridView в DataTable, тогда будет предложено следующее:

Используя SpreadSheetLight (устанавливается через NuGet), вы можете использовать функцию как образец ниже. Передайте следующее, полный путь и имя файла, имя листа, DataTable из DataGridView, например, Dim dt As DataTable = CType (DataGridView1.DataSource, DataTable) и последний аргумент, если True включил заголовки столбцов (имена DataColumn) или False исключить столбец имена. Домашняя страница SpreadSheetLight .

Public Sub SimpleExportRaw(
    pFileName As String,
    pSheetName As String,
    pDataTable As DataTable,
    pColumnHeaders As Boolean)

    Using doc As New SLDocument()
        doc.SelectWorksheet(pSheetName)
        doc.ImportDataTable(1, SLConvert.ToColumnIndex("A"), pDataTable, pColumnHeaders)
        doc.SaveAs(pFileName)
    End Using

End Sub
...