我正在使用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++;
}

关于c# - 如何在C#中快速读取Excel电子表格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7613898/

10-13 05:16