我有一个Excel VSTO应用程序,它在内存中存储一个大型数据表,并将其中的一部分绑定到工作表。用户可以更改他们选择显示的字段,并定期进行批量更新。
大量更新循环通过更新两个字段的datatable。此更新过程似乎非常慢(即。更新40多条记录可能需要20秒)。
datatable非常大(10,000行x 450列),既绑定到一个隐藏的工作表,也绑定到一个绑定到可见工作表的较小的视图(20个字段)。
对datatable的所有更新都是用代码完成的。
ProductRow = dt.Rows.Find(foundRows(i)("Primary Key"))
If IsNothing(ProductRow) = False Then
ProductRow("DECISION") = "Some Value"
Updated += 1
End If
我怀疑正是绑定到工作表的大量数据减慢了这一过程,但是任何加快这一过程的建议都是最受欢迎的。
发布于 2017-11-26 02:41:23
使用VSTO遍历电子表格几乎在任何有这么多行/列的事件中都会很慢。即使是VBA也不会那么擅长这项任务。
我建议你实现一个穷人的状态模型。换句话说,添加一列(必要时隐藏)来指示每一行的状态--特别是它是否已更改。进行任何更改时,请确保行状态的列已更新,以显示该行已被更改。如果您还没有完成此操作的方法,则可以通过worksheet change事件来完成此操作。
然后,当您在电子表格中循环时,只关注状态已更改的值。我的猜测是,您正在检查和更新每一行,即使是那些不需要更新的行。
作为最后的想法,这必须在Excel中完成吗?标准.NET网格中的数据绑定将几乎开箱即用地处理此问题。
https://stackoverflow.com/questions/47445120
复制