将具有多个工作表的工作簿编写到单个文本文件中

时间:2012-09-20 09:56:41

标签: vb.net excel-2007 excel-interop

我正在尝试将以下代码拆分为多个线程(工作簿中的每个工作表一个)。有超过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的异常

不确定我在这里做错了什么,有人可以帮忙吗?

谢谢!

**编辑**
循环似乎有效,但只能通过一次迭代。当它想要进入下一次运行时,它会抛出异常。

1 个答案:

答案 0 :(得分:0)

在您的IF语句... sheet.Range("A" & i) ...中缺少第二个参数 我怀疑你打算访问单个单元格( NOT 单元格的范围) - 我不确定VB的确切语法 - 你必须自己查找。
您的赋值语句也会出现同样的问题。