如何使用OLEDB读取xls文件?

时间:2019-02-21 07:25:21

标签: c# vb.net oledb xls

我想使用OLEDB从xls文件中读取所有数据,但是我没有任何经验。

string filename = @"C:\Users\sasa\Downloads\user-account-creation_2.xls";
string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties='Excel 8.0;HDR=YES'";

using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connString))
{
    conn.Open();
    System.Data.OleDb.OleDbCommand selectCommand = new System.Data.OleDb.OleDbCommand("select * from [Sheet1$]", conn);
    System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(selectCommand);

    DataTable dt = new DataTable();
    adapter.Fill(dt);

    int counter = 0;
    foreach (DataRow row in dt.Rows)
    {
        String dataA = row["email"].ToString();
        // String dataB= row["DataB"].ToString();
        Console.WriteLine(dataA + " = ");
        counter++;
        if (counter >= 40) break;
    }
}

我想从电子邮件行中读取所有数据

this pic phor xls file

我收到此错误

  

“ Sheet $”不​​是有效名称。确保它不包含无效字符或标点符号,并且时间不要太长

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

好吧,您没有工作表Sheet1吗?您的工作表似乎被称为“来自用户名的电子邮件地址”,因此您的查询应该是...

Select * From ['email address from username$']

也请不要使用Microsoft.Jet.OLEDB.4.0,因为它现在已经过时了。使用Microsoft.ACE.OLEDB.12.0。如果在扩展属性中指定Excel 12.0,它将同时打开.xls和.xlsx文件。

您还可以单行加载DataTable ...

dt.Load(new System.Data.OleDb.OleDbCommand("Select * From ['email address from username$']", conn).ExecuteReader());

要读取文件中表的名称,请使用...

DataTable dtTablesList = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

foreach (DataRow drTable in dtTablesList.Rows)
{
    //Do Something
    //But be careful as this will also return Defined Names. i.e ranges created using the Defined Name functionality
    //Actual Sheet names end with $ or $'
    if (drTable["Table_Name"].ToString().EndsWith("$") || drTable["Table_Name"].ToString().EndsWith("$'"))
    {
        Console.WriteLine(drTable["Table_Name"]);
    }
}