【问题标题】:reducing Excel access time减少 Excel 访问时间
【发布时间】:2015-08-05 21:53:34
【问题描述】:

我正在使用 Microsoft.Office.Interop.Excel 在 c# 中处理 Excel 文件。 我的问题是我的程序运行速度很慢。 基本上,它的作用是遍历 Excel 工作表的单元格,并读取每个单元格中的数据。

我使用以下命令:

value = (range.Cells[row, col] as Excel.Range).Value2;

其中 value 是我的变量,range 是 Range 类的 Interop.Excel 对象。

Interop 中是否有更好的方法来访问访问文件或我应该使用的其他库?

【问题讨论】:

  • 不要使用互操作。使用 OLEDB 或 EPPlus 之类的库来读取文件,而无需使用电子表格
  • 使用sheet.get_Range()批量加载到内存中,然后循环
  • 我在今年早些时候遇到了这个问题 - 请查看两次尝试并注意第一次的速度有多快:how-to-open-and-parse-excel-data

标签: c# excel office-interop


【解决方案1】:

如果可能,请使用像 EPPLUS 这样的库,它比互操作快得多,而且更容易编程。

如果由于外部限制而无法实现,请尽量减少互操作调用的次数。在 excel 中进行循环是自找麻烦 - 因为每个单元格都必须通过互操作访问,并且将数据从 excel 编组到您的应用程序会占用大量时间。使用 get_Range() 一次性获取整个数组要好得多。单个请求会花费很长时间,但之后在 C# 中循环非常快。一般来说,在 C# 端做任何你能做的事情都是有益的——即使 excel 会提供相同的功能。

【讨论】:

  • get_Range() 似乎没有比 sheet.UsedRange 提供更好的结果。 EPPLUS 与 Excel 2013 兼容吗?
  • 是的,当然。 EPPLUS 不适用于 xls 文件,但所有 xlsx 都可以
【解决方案2】:

Excel Data Reader

如果阅读是您唯一的用例,那么轻巧且速度非常快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2012-12-31
    相关资源
    最近更新 更多