Отлично !!!
Я использовал подход двухмерного массива и добился огромного прироста производительности !!.
Ранее я использовал межклеточный подход, как показано ниже,
Dim cell As Excel.Range = Nothing
cell = sheet.Cells(rowIndex, colIndex)
cell.Value = "Some value"
Я использовал для перебора диапазона ячеек и использовал для копирования значения в каждой ячейке.Здесь каждый sheet.Cells
и cell.Value
является вызовом взаимодействия и для каждого вызова он вызывает вызов Excel.exe, который стоит больше времени.
В 2D-подходе я заполнил данные, которые должны бытькопируется в ячейки Excel, в 2D-массив, а затем назначается 2D-массиву для значения выбранного диапазона ячеек.Как показано ниже,
Dim darray(recordCount - 1, noOfCol - 1) As String
//Fill the data in darray
//startPosRange = Get the range of cell from where to start writing data
startPosRange = startPosRange.Resize(recordCount, noOfCol)
startPosRange.Value = darray
После этих модификаций я собрал данные о производительности для обоих подходов, и результаты на удивление великолепны !! Более поздний подход в 25 раз быстрее предыдущего .
Точно так же я использовал подход двумерного массива для чтения данных из ячеек и наблюдал аналогичное повышение производительности.Примеры кода приведены ниже.
Поэлементный подход,
Dim usedRange As Excel.Range = sheet.UsedRange
For Each row As Excel.Range In usedRange.Rows()
For Each cellData As Excel.Range In row.Cells
//Gather cellData.Value in some container.
Next
Двухмерный массив,
Dim usedRange As Excel.Range = sheet.UsedRange
//Here the array index starts from 1. why???
Dim darray(,) As Object = CType(usedRange.Value, Object(,))
Dim rows As Integer = darray.GetUpperBound(0)
Dim cols As Integer = darray.GetUpperBound(1)
For i As Integer = 1 To rows
For j As Integer = 1 To cols
Dim str As String
If darray(i, j) Is Nothing Then
str = ""
Else
str = darray(i, j).ToString
End If
//Use value of str
Next
Next
См. http://support.microsoft.com/kb/306023, http://dotnetperls.com/excel-interop (спасибо ChickSentMeHighE за ссылку)
Наслаждайтесь производительностью !!!