如何快速读取C#中的Excel电子表格

我正在使用Microsoft.Office.Interop.Excel来读取在内存中打开的电子表格。

gXlWs = (Microsoft.Office.Interop.Excel.Worksheet)gXlApp.ActiveWorkbook.ActiveSheet; int NumCols = 7; string[] Fields = new string[NumCols]; string input = null; int NumRow = 2; while (Convert.ToString(((Microsoft.Office.Interop.Excel.Range)gXlWs.Cells[NumRow, 1]).Value2) != null) { for (int c = 1; c <= NumCols; c++) { Fields[c-1] = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)gXlWs.Cells[NumRow, c]).Value2); } NumRow++; //Do my other processing } 

我有18万行,结果很慢。 我不确定“转换”是否有效。 无论如何,我能做得更快吗?

月亮

嗨,我发现一个非常快的方式。

使用“get_range”一次性读取整个数据会更好。 这将数据加载到内存中,我可以像普通数组一样循环。

 Microsoft.Office.Interop.Excel.Range range = gXlWs.get_Range("A1", "F188000"); object[,] values = (object[,])range.Value2; int NumRow=1; while (NumRow < values.GetLength(0)) { for (int c = 1; c <= NumCols; c++) { Fields[c - 1] = Convert.ToString(values[NumRow, c]); } NumRow++; } 

有几个选项 – 都涉及一些额外的库:

  • OpenXML 2.0 (来自MS的免费库)可以用来读取/修改.xlsx的内容,所以你可以用它做你想要的

  • 一些(商业)第三方库提供了网格控件,使您可以像使用SpreadsheetGear , Aspose.Cells等一样在应用程序中使用excel文件(比如Winforms / WPF / ASP.NET …)

我不确定“转换”是否有效。 无论如何,我能做得更快吗?

是什么让你相信这个? 我向你保证, Convert.ToString()是你发布的代码中最有效的方法。 你的问题是,你通过一个Excel文档循环180,000条logging…

你可以分开工作,因为你知道行数这是trival要做。

为什么要将Value2转换为string?

我猜这不是转换“减慢”的来源…

实际上,检索单元值非常慢。

我认为这种转换不是必须的:

 (Microsoft.Office.Interop.Excel.Range)gXlWs 

它应该没有这个工作。

你可以直接问:

 gXlWs.Cells[NumRow, 1].Value != null 

尝试将整个范围或至less整行移动到一个对象Matrix,并使用它而不是范围本身。