2010-08-09 2 views
2

MS-Excel 셀에서 데이터를 읽거나 쓰는 동안 성능 문제가 있습니다. VB.NET 자동화를 위해 MS Excel 11.0 개체 라이브러리를 사용하고 있습니다.MS Excel 쓰기 성능 향상

현재 Excel 파일에서 읽고 쓰는 데 너무 많은 시간이 걸립니다. (1000 행을 읽는 데 10 분 :(). 셀 단위 읽기 및 쓰기 방식이 효과적이지는 않습니다. 대량 작업을 사용하여 데이터를 읽거나 쓸 수있는 방법이 있습니까?

답변

6

셀 전체를 읽고 2D arrray에 저장할 수 있습니다. 그러면 Excel에서 셀에 액세스 할 때와 마찬가지로 2D 배열에 액세스 할 수 있습니다.

Excel 개체에는 VB.NET에 익숙하지 않지만 당신은 C는 # 다음이 링크를 빠른 읽기를 포기하고 그것을 구현하려고 이해합니다.

http://dotnetperls.com/excel-interop

은 "얻기 통합 문서 데이터"섹션을 읽어

4

그레이트 !!!

2D 배열 방식을 사용하여 엄청난 성능 향상을 이루었습니다 !! 아래와 같이

은 이전 I는
Dim cell As Excel.Range = Nothing 
cell = sheet.Cells(rowIndex, colIndex) 
cell.Value = "Some value" 

는 I가 셀 범위를 통해 반복하는 데, 각 셀의 값을 복사하는 데 사용되는 상기 셀 별 aprroach 사용. 여기에 각각 sheet.Cellscell.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)

가 즐길 수 공연!!!

+0

Vinod, 자세한 결과를 게시 해 주셔서 감사합니다! – Joost