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

我正在阅读一个非常大的Excel文件到一个VB.net应用程序。 用户在运行时从文件select器指定文件。 我目前正在使用Microsoft.Office.Interop.Excel.Application应用程序接口逐行读取Excel数据。 喜欢这个…

first = Excel.Cells(rowindex, FirstColumnIndex).value 

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

注意显然,将这​​么多的数据保存在一个Excel文件中是不知道的,但是这就是我需要的数据(其他地方的一些数据)被存储的地方。

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

至于“互操作”,我不是疯了,因为(1)你必须安装Excel,(2)你现在不得不处理繁琐的Excel API,(3)你现在不得不担心适当处理COM对象(否则,在导入完成后,您将最终导致Excel进程挂起很长时间 – 请参阅“ 如何正确清理Excel互操作对象”中的前三个答案)。 也就是说,如果您select使用interop,则可以通过使用数组来加快速度,而不是使用一次一个单元格的方法(请参阅使用Excel Interop w / o可以一次性粘贴一个单元格块剪贴板? )。

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

如果您使用.xslx扩展名处理Excel 2007(或更新的)文件,则还可以尝试OpenXml SDK:

http://www.microsoft.com/download/en/details.aspx?id=5124

一个例子,即使是大文件,也可以在这里find: http : //blogs.msdn.com/b/brian_jones/archive/2010/05/27/parsing-and-reading-large-excel-files-with-the -open-XML-sdk.aspx

如果是Excel 1997文件(.xls扩展名),我可以从CodeProject推荐这个类: http : //www.codeproject.com/Articles/14639/Fast-Excel-file-reader-with-basic-functionality

感谢所有伟大的答案。 ADO.Net的方式,方式,更快。 像15或20分钟快。 我在这里发帖想知道如果我应该打扰在ADO.net重写代码为小加速ups。 但是,答案很明显,ADO比Office.Interop快得多,可以读取Excel文件。