从excel功能区c渲染大量数据

时间:2014-01-16 14:52:08

标签: c# excel-interop excel-addins

我在c#中使用excel addin项目在Excel工作表中创建和加载数据,我一直在尝试优化127,000行数据的加载,这需要一分钟和30秒才能将127 k行写入Excel工作表。我已经尝试了一些写入excel表的方法,比如创建一个范围和一个数组块并将该数组块设置到该范围,这种方式非常慢,我能够通过使用带有数据表的ListObject SetDataBinding来获取某些时间持有数据。

listObject.ListObject.AutoSetDataBoundColumnHeaders = true;
listObject.ListObject.SetDataBinding(data);
listObject.ListObject.Disconnect();

此过程要快得多,但仍需要1到30次写入屏幕。还有其他方法可以减少时间。我发现在一个没有功能区的项目中,速度非常快。

1 个答案:

答案 0 :(得分:0)

Excel加载项锁定UI并在工作时显示进度条的情况并不少见。

话虽如此,我在本文Replace This While Loop with More Efficient Code?中描述了属性的Interop版本。我在那里描述的方法有两种最简单的方法可以加快与Excel数据表的交互。可以在此处找到VBA属性的互操作版本的链接:MSDN:_Application.ScreenUpdating和此处:MSDN:_Application.Calculation

Excel在后台执行大量操作以确保数据尽可能最新。当以用户的速度做事时,这很有效,UI响应很快,公式似乎总是显示正确的数据。当您开始与脚本或代码交互时(比用户快得多),需要大量资源才能使数据表保持最新状态,因此所有操作都需要相当长的时间。

另一件需要考虑的事情是,手术的哪一部分需要很长时间。它是从某些外部源检索数据吗?它是将数据写入Excel吗?是数据源和Excel之间的某种翻译操作吗?如果我上面提到的解决方案效果很好,太棒了!如果不是,你需要做更多的调查,看看你的数据源是否提供的数据太慢,或者你正在进行大量的数据转换操作,这会让事情变得更糟。在使用像这样的Excel时,有10次中有9次,ScreenUpdatingCalculation会减慢速度,其他10%可能难以确定。