Любой другой способ экспортировать Datatable в Excel более быстрым способом, без необходимости рисовать каждую строку и столбец в .net?

У меня есть Datatable, называемый dtConsolidado, который я извлекаю из процедуры sql, эта часть работает нормально, но очень задерживается при экспорте большого количества записей, каким-либо образом сделать его более оптимальным?

 Dim m_Excel As New Excel.Application
    m_Excel.Cursor = Excel.XlMousePointer.xlWait
    m_Excel.ScreenUpdating = False
    m_Excel.Visible = True
    Dim objLibroExcel As Excel.Workbook = m_Excel.Workbooks.Add
    objLibroExcel.Worksheets.Add()
    Dim objHojaConsolidado As Excel.Worksheet = objLibroExcel.Worksheets(1)
    Dim objHojaAvance As Excel.Worksheet = objLibroExcel.Worksheets(2)


    With objHojaConsolidado
        .Name = ("HOJA 1")
        .Activate()
        .Cells.Select()
        .Cells.ClearContents()
        ' Seleccionamos la primera celda de la hoja.
        .Range("A1").Select()
        ' Escribimos los nombres de las columnas en la primera
        ' celda de la primera fila de la hoja de cálculo
        Dim fila As Integer = 1
        Dim columna As Integer = 1
        For Each dc As DataColumn In dtConsolidado.Columns
            .Cells(fila, columna) = dc.ColumnName
            columna += 1
        Next
        ' Establecemos los atributos de la fuente para las
        ' celdas de la primera fila.
        With .Range(.Cells(1, 1), .Cells(1, dtConsolidado.Columns.Count)).Font
            .Name = "Calibri"
            .Bold = True
            .Size = 12
        End With
        ' Insertamos los datos en la hoja de cálculo, comenzando por la
        ' fila número 2, ya que la primera fila está ocupada
        ' por el nombre de las columnas.
        fila = 2
        For Each row As DataRow In dtConsolidado.Rows
            ' Primera columna
            columna = 1
            For Each dc As DataColumn In dtConsolidado.Columns
                .Cells(fila, columna) = row(dc.ColumnName)

                ' Siguiente columna
                columna += 1
            Next
            ' Siguiente fila
            fila += 1
        Next
        ' Autoajustamos el ancho de todas las columnas utilizadas.
        .Columns().AutoFit()

    End With

Не могли бы вы помочь мне, мне нужно, чтобы это было быстро и эффективно, экспорт занимает несколько минут.

2
задан 26.11.2019, 00:59
1 ответ

BГЎsicamente есть два mГ©todos, чтобы экспортировать данные в Excel. Первый состоит в том, чтобы использовать OleDb с драйвером Microsoft.ACE.OLEDB.12.0. Он используется как поставщик данных mГЎs когда могут делать один Insert, хотя это одна soluciГіn мало использованная, так как есть много оттенков, которые он способствует тому, чтобы Ваш configuraciГіn она была сложной.

Второй состоит в том, чтобы использовать какую-то librerГ - в. Она mГЎs возненавиденная многими это собственная Office, знаменитой Interop, которую использовал ты сами. Она mГЎs ГЎgil - EPPlus , которых ты можешь устанавливать с NuGet, и она бесплатная. С немногими lГ-neas podrГЎs экспортировать совсем Datatable.

Dim archivoExcel As New FileInfo("C:\exportacion\export.xlsx")
Using package As New ExcelPackage(archivoExcel)
    Dim ws As ExcelWorksheet = package.Workbook.Worksheets.Add("Hoja1")
    ws.Cells("A1").LoadFromDataTable(dtConsolidado, True)
    package.Save()
End Using

В Край экспортирования данных, podrГЎs менять аспект ее exportaciГіn. В эта ссылка у тебя есть mГєltiples примеры.

1
ответ дан 01.12.2019, 10:48

Теги

Похожие вопросы