我继承了一个使用 Office.Interop.Excel 将数据插入电子表格的大型项目。
就可见交互而言,您单击一个按钮会出现一个 Excel 电子表格,其中所有数据都已插入。我之所以提到这一点,是因为我已经在其他地方看到它已经打开程序并插入了值。我正在使用的程序在 Excel 出现之前插入数据。
不幸的是,一旦插入了相对大量的数据,到 Excel 的信息传输就会被锁定,程序无法继续。
无论如何,我做了一些调查,发现以下行:
myWorksheet.Range("A" & rowNumber).Resize(dataArray.GetUpperBound(0) + 1, columnCount).Value = dataArray
这会将 dataArray 中的所有数据直接复制到工作表中的一堆单元格中。
我猜测问题可能是由于尝试一次传输如此大量的数据引起的,所以我将其更改为逐行复制数据:
For horizIndex As Integer = 0 To dataArray.GetUpperBound(0)
Dim subArr(0, arr.GetUpperBound(1)) As Object
For columnIndex As Integer = 0 To dataArray.GetUpperBound(1)
subArr(0, columnIndex) = dataArray(horizIndex, columnIndex)
Next
myWorksheet.Range("A" & (rowNumber + horizIndex)).Resize(horizIndex + 1, columnCount).Value = arr
Next
这会将 350 左右的行复制到 Excel,然后行设置值停止返回。
任何人都可以提出解决这个问题的方法吗?
编辑:好的,我已经尝试了 Lazarus 在下面提出的一些建议,这就是我现在所处的位置:
只要数据相对较短,或者数据类型相当简单(整数等),代码的所有变体都可以正常工作。原始的大量复制工作正常,逐行复制和逐单元复制工作,只要数据集小或简单。
但是,我的实际数据集相对复杂,并且包含多种数据类型,包括字符串。
它在 350 行之后倒下。它落在代码的 Excel 端,线程转到 Excel 并且永远不会回来。
那么,还有什么想法,有人吗?