MS-Excel 셀에서 데이터를 읽거나 쓰는 동안 성능 문제가 있습니다. VB.NET 자동화를 위해 MS Excel 11.0 개체 라이브러리를 사용하고 있습니다.MS Excel 쓰기 성능 향상
현재 Excel 파일에서 읽고 쓰는 데 너무 많은 시간이 걸립니다. (1000 행을 읽는 데 10 분 :(). 셀 단위 읽기 및 쓰기 방식이 효과적이지는 않습니다. 대량 작업을 사용하여 데이터를 읽거나 쓸 수있는 방법이 있습니까?
MS-Excel 셀에서 데이터를 읽거나 쓰는 동안 성능 문제가 있습니다. VB.NET 자동화를 위해 MS Excel 11.0 개체 라이브러리를 사용하고 있습니다.MS Excel 쓰기 성능 향상
현재 Excel 파일에서 읽고 쓰는 데 너무 많은 시간이 걸립니다. (1000 행을 읽는 데 10 분 :(). 셀 단위 읽기 및 쓰기 방식이 효과적이지는 않습니다. 대량 작업을 사용하여 데이터를 읽거나 쓸 수있는 방법이 있습니까?
셀 전체를 읽고 2D arrray에 저장할 수 있습니다. 그러면 Excel에서 셀에 액세스 할 때와 마찬가지로 2D 배열에 액세스 할 수 있습니다.
Excel 개체에는 VB.NET에 익숙하지 않지만 당신은 C는 # 다음이 링크를 빠른 읽기를 포기하고 그것을 구현하려고 이해합니다.
은 "얻기 통합 문서 데이터"섹션을 읽어그레이트 !!!
2D 배열 방식을 사용하여 엄청난 성능 향상을 이루었습니다 !! 아래와 같이
은 이전 I는Dim cell As Excel.Range = Nothing
cell = sheet.Cells(rowIndex, colIndex)
cell.Value = "Some value"
는 I가 셀 범위를 통해 반복하는 데, 각 셀의 값을 복사하는 데 사용되는 상기 셀 별 aprroach 사용. 여기에 각각
sheet.Cells
과
cell.Value
이 interop 호출이고 모든 호출에 대해 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 배 빠릅니다..
마찬가지로 2D 셀 방식을 사용하여 셀에서 데이터를 읽었으며 비슷한 성능 향상을 보았습니다. 코드 샘플은 다음과 같습니다.
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
를 참조하십시오
세포에 의한 세포 접근 방식,
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
2 차원 배열 방식, http://support.microsoft.com/kb/306023, http://dotnetperls.com/excel-interop (링크에 대한 감사 ChickSentMeHighE)
가 즐길 수 공연!!!
Vinod, 자세한 결과를 게시 해 주셔서 감사합니다! – Joost