我正在使用电子表格,基本上我想在之前保存的给定范围的末尾添加一些文本。我搜索了论坛,发现了似乎可以得到各种结果的各种技术。
我使用了以下代码:
foreach (Excel.Range row in MyGivenRange.Rows)
{
Excel.Range cell = (Excel.Range)row.Cells[1, 1];
cell.Value += "Add this text";
}
这会将文本逐个添加到范围内的每个单元格的末尾,但是因为我的电子表格中有一个好的11k记录,这需要一段时间。我可以采取任何捷径吗?我已经尝试过allsorts作为复制和粘贴值。我可以快速在其旁边的列中粘贴一些文本然后合并以节省时间吗?
只是想知道你们是否有任何想法我能做什么..对我来说,搜索每一行可能效率很低。和以前一样,我发现使用范围的直接复制粘贴节省了我的时间。也许在给定的列或范围上使用insert可以直接调整每个实例?
答案 0 :(得分:0)
这是vba,但转换为C#应该相当容易。
我是在回答你的问题时写的。使用testit
更新大约16000个单元格,大约需要6秒钟。基本思想是将Excel公式复制到数组中,更新数组,然后将数组作为公式粘贴回Excel。
Sub testit()
appendTextToRange "A1:D4000", "hey there"
End Sub
Sub appendTextToRange(rngAddress As String, append As String)
Dim arr() As Variant, c As Variant
arr = Range(rngAddress).Formula
For x = LBound(arr, 1) To UBound(arr, 1)
For y = LBound(arr, 2) To UBound(arr, 2)
Debug.Print arr(x, y)
If arr(x, y) = "" Then
arr(x, y) = append
ElseIf Left(arr(x, y), 1) = "=" Then
arr(x, y) = arr(x, y) & " & "" " & append & """"
Else
arr(x, y) = arr(x, y) & " " & append
End If
Next
Next
Range(rngAddress).Formula = arr
End Sub
警告:如果您使用此更新用于计算的任何字段,则会中断计算。