将Excel文件读入.NET应用程序的更快方法是:ADO.net还是Microsoft.Office.Interop.Excel.Application?

ber*_*436 1 .net com excel ado.net office-interop

我正在将一个非常大的Excel文件读入VB.net应用程序.用户在运行时从文件选择器指定文件.我目前正在使用Microsoft.Office.Interop.Excel.Application应用程序接口逐行读取Excel数据.像这样...

first = Excel.Cells(rowindex, FirstColumnIndex).value
Run Code Online (Sandbox Code Playgroud)

我需要读取大的Excel文件(80000行),当前的方法需要很长时间.我想知道是否有更快的方法.我知道可以用ADO.net读取文件.这更快吗?还有更快的方法吗?

注意显然,在Excel文件中保存这么多数据并不是一个想法,但这就是我需要的数据(其中一些来自其他地方)的存储位置.

dev*_*xer 5

我猜大多数情况下ADO.NET会更快,但我不推荐它,因为它不能很好地工作.存在许多问题,例如通过基于前几行进行猜测来确定列的数据类型,而不是其他一些更可靠的方法.您在灵活性方面也受到限制,例如您希望如何使用#N/A来处理空单元格或单元格.

至于"互操作",我并不是因为(1)你必须安装Excel,(2)你现在必须处理繁琐的Excel API,以及(3)你现在必须担心正确处理COM对象(否则,在完成导入后很久就会出现Excel进程 - 请参阅如何正确清理Excel互操作对象的前三个答案).也就是说,如果您选择使用互操作,您可以通过使用数组而不是一次一个单元格的方法来加快速度(请参阅使用Excel Interop无法使用Excel一次性粘贴一个单元格块剪贴板?).

我最近开始使用的选项是EPPlus.这个开源项目比你提到的两种方法有很多优点.首先,我认为它至少和ADO.NET一样快,如果不是更快的话.其次,它不需要您安装Excel,因为它直接读取和写入.xlsx文件.一个缺点是它不适用于2007年之前格式保存的Excel文档.另一个缺点是EPPlus的API在某些地方有点不寻常,而且可能有点令人困惑.如果您选择这条路线,请给我留言,我可以提供一些很好的示例代码来帮助您入门.