C# 缩短Excel访问时间

C# 缩短Excel访问时间,c#,excel,office-interop,C#,Excel,Office Interop,我正在使用c#和Excel文件,使用Microsoft.Office.Interop.Excel。 我的问题是我的程序运行得很慢。 基本上,它所做的是遍历Excel工作表的单元格,并读取每个单元格中的数据 我使用以下命令: value = (range.Cells[row, col] as Excel.Range).Value2; 其中value是我的变量,range是range类的Interop.Excel对象 在Interop中是否有更好的方法来访问access文件或其他我应该使用的库?如

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

我使用以下命令:

value = (range.Cells[row, col] as Excel.Range).Value2;
其中value是我的变量,range是range类的Interop.Excel对象


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

如果可能,请使用像EPPLUS这样的库,它比Interop快得多,而且编程也容易得多

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


如果阅读是您唯一的使用案例,则轻量级且非常快速。

不要使用互操作。使用OLEDB或像EPPlus这样的库来读取文件,而不使用电子表格使用
工作表。get_Range()
批量加载到内存中,然后loopI在今年早些时候遇到了这个问题-请查看这两次尝试,并注意第一次尝试的速度有多快:get_Range()似乎没有比sheet.UsedRange提供更好的结果。EPPLUS是否与Excel 2013兼容?当然可以。EPPLUS不能处理xls文件,但所有xlsx都可以