如何快速阅读c#中的Excel电子表格

Man*_*oon 7 c# excel interop

我正在使用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
}
Run Code Online (Sandbox Code Playgroud)

我有180,000行,结果非常慢.我不确定"转换"是否有效.反正我还能做得更快吗?

月亮

Man*_*oon 23

嗨,我找到了一个非常快的方法.

最好使用"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++;
}
Run Code Online (Sandbox Code Playgroud)

  • @ user728630 获取数据范围的另一种方法是:`Excel.Excel.Range DataRange = ExcelWorksheet.UsedRange; 对象[,] ExcelRangeValues = (对象[,])DataRange.Value2; var RowCount = DataRange.Rows.Count + 1; var ColumnCount = DataRange.Columns.Count + 1;` (2认同)