Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不使用OleDbConnection或for循环将Excel导入DataTable_C#_Excel_Import - Fatal编程技术网

C# 不使用OleDbConnection或for循环将Excel导入DataTable

C# 不使用OleDbConnection或for循环将Excel导入DataTable,c#,excel,import,C#,Excel,Import,我想使用Microsoft.Office.Interop.Excel.Worksheet从Excel中获取数据;是否可以将工作表中的所有数据放入DataTable,而不使用for循环或OLEDB连接 我从以下内容中找到了此解决方案,但如果Excel工作表中有大量数据,则性能会受到影响: public DataTable Import(String path) { Microsoft.Office.Interop.Excel.ApplicationClass app = new Micro

我想使用Microsoft.Office.Interop.Excel.Worksheet从Excel中获取数据;是否可以将工作表中的所有数据放入DataTable,而不使用for循环或OLEDB连接

我从以下内容中找到了此解决方案,但如果Excel工作表中有大量数据,则性能会受到影响:

public DataTable Import(String path)
{
    Microsoft.Office.Interop.Excel.ApplicationClass app = new Microsoft.Office.Interop.Excel.ApplicationClass();
    Microsoft.Office.Interop.Excel.Workbook workBook = app.Workbooks.Open(path, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

    Microsoft.Office.Interop.Excel.Worksheet workSheet = (Microsoft.Office.Interop.Excel.Worksheet)workBook.ActiveSheet;

    int index = 0;
    object rowIndex = 2;

    DataTable dt = new DataTable();
    dt.Columns.Add("FirstName");
    dt.Columns.Add("LastName");
    dt.Columns.Add("Mobile");
    dt.Columns.Add("Landline");
    dt.Columns.Add("Email");
    dt.Columns.Add("ID");

    DataRow row;

    while (((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, 1]).Value2 != null)
    {
        rowIndex = 2 + index;
        row = dt.NewRow();
        row[0] = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, 1]).Value2);
        row[1] = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, 2]).Value2);
        row[2] = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, 3]).Value2);
        row[3] = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, 4]).Value2);
        row[4] = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, 5]).Value2);
        index++;
        dt.Rows.Add(row);
    }
    app.Workbooks.Close();
    return dt;
}

慢的不是循环,而是循环中单个细胞的读数。谢谢你,克里斯。我刚刚实现了你所说的,而且确实快多了。请为这个问题添加答案,这样我就可以将它标记为已回答。不是循环太慢,而是循环中单个细胞的读数。谢谢你,克里斯。我刚刚实现了你所说的,而且确实快多了。请为这个问题添加答案,这样我就可以将它标记为已回答。