C#中处理大型Excel数据范围的最高效方法是什么?

3

我正在使用C#中的Excel Interop,并编写代码来对拥有数万行数据的表格进行一些相当复杂的操作。它往往运行得很慢。

我经常将数据存储在某些变量中,然后在最终将结果写入工作表之前进行一些中间计算。

我确信这不是一个好的方法,但我经常发现自己正在构建一个临时工作表,在我的代码完成执行后将其删除,以便我可以使用Excel范围属性的方法来处理数据,而不是尝试在数组中实现类似的方法。最常见的情况是,这涉及到诸如按多个列排序、删除重复项等问题。这些列几乎总是具有许多不同类型的数据(字符串、整数、带两位小数的数字 - 虽然这些单元格中存储的实际数据类型并不总是简单的(例如100000000.01有时似乎是双精度类型,有时似乎是十进制类型)。处理所有不同数据类型的最简单方法似乎是只使用Excel范围,这就是为什么我的代码经常会创建临时工作表,然后在我的代码中将其删除的原因。

应该如何正确高效地处理这些情况呢?


1
你尝试过使用实现了 IComparer<object>IEqualityComparer<object> 接口的自定义对象来进行 LINQ 操作吗? - Lucas Trzesniewski
你有没有考虑过使用直接操作XML的库,而不是通过COM连接到正在运行的Excel进程?这样至少可以减少一个中间环节。 - mason
1
Excel Interop很慢。你应该尝试使用.NET的Excel库。 - alex.pulver
这真的取决于你在做什么。如果你想要去除重复项,那么将范围加载到已经具有.RemoveDuplicate或类似内置功能的集合中。如果你想要排序,则使用.AutoFilter或再次将范围加载到集合中。这个问题太宽泛了,如果可以的话,请缩小范围。 - user2140173
请随意查看我在类似主题上的其他答案。这里, 这里, 和 这里 - user2140173
显示剩余2条评论
1个回答

1
请看这些链接:
  1. http://www.clear-lines.com/blog/post/Write-data-to-an-Excel-worksheet-with-C-fast.aspx(将数据快速写入Excel工作表)
  2. Excel Interop - Efficiency and performance(Excel互操作性-效率和性能)
  3. http://xldennis.wordpress.com/2012/01/30/best-practices-export-data-to-excel/(最佳实践:导出数据到Excel)
如果您正在更新单个单元格,那么速度会非常慢。但一般来说,Excel互操作性很慢。您是否考虑过创建CSV文件,然后使用Excel互操作性将最终结果转换?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接