0

次のコードを複数のスレッド (ワークブックのシートごとに 1 つ) に分割しようとしています。400,000 を超える行をまとめて処理すると、1 つのスレッドでかなりの時間がかかります。分割すると、速度が向上することを願っています。

Excel 相互運用機能を使用してからしばらく経ちましたが、次のコードが機能するはずです。これを各スレッドで実行したい:

        Dim CurrentRow As String = Nothing

        For i As Integer = 1 To sheet.Rows.Count

            If Not String.IsNullOrEmpty(sheet.Range("A" & i).ToString) Then
                CurrentRow = _
                    sheet.Range("H" & i).Value.ToString.Trim & "," & _
                    sheet.Range("A" & i).Value.ToString.Trim & "," & _
                    sheet.Range("B" & i).Value.ToString.Trim & "," & _
                    sheet.Range("C" & i).Value.ToString.Trim & "," & _
                    sheet.Range("D" & i).Value.ToString.Trim & "," & _
                    sheet.Range("E" & i).Value.ToString.Trim & "," & _
                    sheet.Range("F" & i).Value.ToString.Trim & "," & _
                    sheet.Range("G" & i).Value.ToString.Trim & "," & _
                    sheet.Range("I" & i).Value.ToString.Trim & "," & _
                    sheet.Range("J" & i).Value.ToString.Trim & "," & _
                    sheet.Range("K" & i).Value.ToString.Trim & ","

                My.Computer.FileSystem.WriteAllText("D:\Lists\" & sheet.Name & ".txt", _
                CurrentRow & vbCrLf, True)

                ItemCount = ItemCount + 1

                ElapsedTime = Now().Subtract(StartTime)
                Me.Invoke(Me.AddItemDelegate, New Object() {sheet.Name, ElapsedTime})

            Else
                ItemCount = 0
                Exit For
            End If

残念ながら、if ステートメントで次のエラーが発生します。

System.Runtime.InteropServices.ComException (0x800401A8): Microsoft.Office.Interop.Excel._Worksheet.get_Range (Object Cell1, Object Cell2) での HRESULT 0x800401A8 からの例外

ここで何が間違っているのかわかりません。誰か助けてもらえますか?

ありがとう!

**編集**
ループは機能しているようですが、1回の反復のみです。次の実行に移ろうとすると、例外がスローされます。

4

1 に答える 1

0

IF ステートメント... sheet.Range("A" & i) ...に 2 番目の引数がありません。
単一のセル (セルの範囲ではない) にアクセスするつもりだったのではないかと思います - 正確な VB 構文はわかりません - 自分で調べる必要があります。
割り当てステートメントでも同じ問題が発生します。

于 2012-09-20T10:08:01.840 に答える