У меня проблема с экспортом данных в excel с использованием application.transpose

Это мой код при экспорте данных из базы данных в excel с использованием application.transpose, но я ищу, что он имеет ограничение в 64000 строк или массив, как экспортировать данные, превышающие его предел?

Вот мой код...

Dim dc As System.Data.DataColumn
            Dim colIndex As Integer = 0
            Dim rowIndex As Integer = 0

            Dim adt As New MySqlDataAdapter("My Query", "My connection")
            Dim dt As New DataTable
            adt.Fill(dt)
            'Nombre de mesures  
            Dim Nbligne As Integer = dt.Rows.Count

            '(Write column headers and data)
            For Each dc In dt.Columns
                colIndex = colIndex + 1 

                sheet.Cells(3, colIndex).Resize(Nbligne, ).Value = app.Application.transpose(dt.Rows.OfType(Of DataRow)().[Select](Function(k) CObj(k(dc.ColumnName))).ToArray())
            Next

person MJ Decena    schedule 04.04.2019    source источник
comment
Допустим, у меня более 64000 данных. Как я могу использовать application.transpose для экспорта своих данных в Excel?   -  person MJ Decena    schedule 04.04.2019
comment
Создайте функцию, которая перевернет ваш массив в нужную вам форму. Это будет намного быстрее, чем заполнение ячейки за ячейкой.   -  person Tim Williams    schedule 04.04.2019
comment
Можете ли вы дать мне идею, сэр, как это выполнить?   -  person MJ Decena    schedule 04.04.2019
comment
С петлей? Я на самом деле не программист NET, но вам нужно создать Nbligne x 1 2D-массив из того, что является выходом этого выражения, которое у вас есть внутри Transpose()   -  person Tim Williams    schedule 04.04.2019


Ответы (1)


Что-то подобное

Function TransposeArray1D(ByVal arr As Variant) As Variant
    Dim tempArray As Variant
     ReDim tempArray(LBound(arr, 1) To UBound(arr, 1), LBound(arr(0)) To UBound(arr(0)))
        For y = LBound(arr, 1) To UBound(arr, 1)
            For x = LBound(arr(0)) To UBound(arr(0))
                tempArray(y, x) = arr(y)(x)
            Next x
        Next y
     TransposeArray1D = tempArray
End Function

Function TransposeArray2D(ByVal arr As Variant) As Variant
    Dim tempArray As Variant
     ReDim tempArray(LBound(arr, 2) To UBound(arr, 2), LBound(arr, 1) To UBound(arr, 1))
     For x = LBound(arr, 2) To UBound(arr, 2)
         For y = LBound(arr, 1) To UBound(arr, 1)
             tempArray(x, y) = arr(y, x)
         Next y
     Next x
     TransposeArray2D = tempArray
End Function

Function TransposeArrayIndex(ByVal arr As Variant, ByVal nTh As Long) As Variant
    Dim tempArray As Variant
    ReDim tempArray(0 To UBound(arr, 2))
         For y = LBound(arr, 2) To UBound(arr, 2)
             tempArray(y) = arr(nTh, y)
         Next y
     TransposeArrayIndex = tempArray
End Function
person Dmitrij Holkin    schedule 04.04.2019