Как прочитать файл XLS с помощью OLEDB? - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу прочитать все данные из файла xls, используя OLEDB, но у меня нет никакого опыта в этом.

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

Я получаю эту ошибку

'Лист $' не является допустимым именем.Убедитесь, что он не содержит недопустимых символов или знаков препинания и не слишком длинный

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Ну, у вас нет листа под названием 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"]);
    }
}
0 голосов
/ 21 февраля 2019
...