【问题标题】:Writing Workbook with multiple sheets into a single text file将具有多张工作表的工作簿写入单个文本文件
【发布时间】:2012-09-20 09:56:40
【问题描述】:

我正在尝试将以下代码拆分为多个线程(工作簿中的每个工作表一个线程)。有超过 400,000 行需要共同处理,这在 1 个线程上需要相当长的时间,我希望如果我拆分它,这会加快速度。

自从我使用 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 异常

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

谢谢!

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 抱歉,我删除了评论......sheet.Cell("A" & i) ... 无效。 ... sheet.Cells("A" & i)... 也没有
    • stackoverflow.com/questions/472959/… 似乎暗示着 Cells NOT 被命名但 countedstring value = row.Cells[0].FormattedValue as string;
    猜你喜欢
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多