我正在尝试将以下代码拆分为多个线程(工作簿中的每个工作表一个)。有超过400,000行集体工作,这需要花费相当长的时间在一个线程上,我希望如果我拆分它,这将加快它。
自从我使用Excel Interop已经有一段时间了,但我很确定以下代码应该可行。我想让它在每个线程上运行:
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的异常
不确定我在这里做错了什么,有人可以帮忙吗?
谢谢!
**编辑**
循环似乎有效,但只能通过一次迭代。当它想要进入下一次运行时,它会抛出异常。
答案 0 :(得分:0)
在您的IF语句... sheet.Range("A" & i) ...
中缺少第二个参数
我怀疑你打算访问单个单元格( NOT 单元格的范围) - 我不确定VB的确切语法 - 你必须自己查找。
您的赋值语句也会出现同样的问题。