質問

MS-Excelのセルに/からのデータのリード/ライト時に

私は、パフォーマンスの問題に直面しています。私はVB.NETでの自動化のためにMSエクセル11.0オブジェクトライブラリを使用しています。

は現在、それは/からExcelファイルへの読み書きに時間がかかりすぎます。 (1000行を読むために10分:()。セルごとの読み書きのアプローチは、そのeffiecientではないようです。読むために/一括操作を使用して、書き込みデータをどのような方法は、

?あります
役に立ちましたか?

解決

セルによってセルを読み出すことは、あなたが全体の範囲を読み、2Dにそれを救うことができるのではなくarrray。 Excelでセルにアクセスするとあなたはその後、2次元配列にアクセスすることができます。

私はうまくExcel用VB.NETに精通していないよ、オブジェクトが、あなたは、C#を理解している場合、このリンクに速い読み取りを与え、それを実装しようとします。

http://dotnetperls.com/excel-interopする 「ワークブックのデータの取得」セクションを読む

他のヒント

グレート!

Iは2Dアレイアプローチを使用し、膨大なパフォーマンスの向上を達成!!。

以下に示すように、以前私がセル・バイ・セルaprroachを用い、

Dim cell As Excel.Range = Nothing
cell = sheet.Cells(rowIndex, colIndex)
cell.Value = "Some value"

Iは、セルの範囲を反復処理するために使用され、各セルの値をコピーするために使用されます。 ここでは、すべてのsheet.Cellscell.Valueは相互運用コールで、すべての呼び出しのために、それはより多くの時間がかかります。Excel.exeへの呼び出しを与えます。

私は2次元配列で、Excelのセルにコピーした後、細胞の選択reangeの値に2次元アレイを割り当てられるデータを、充填されたで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
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

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

、参照してください http://support.microsoft.com/kb/306023 に、 http://dotnetperls.com/excel-interop を(リンクしてくれてありがとうChickSentMeHighE)

のパフォーマンスをお楽しみください!!!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top