2010-05-16 3 views
1

Я читаю файл excel с C# и OleDB (12.0). Там я должен указать оператор select с именем листа, который я хочу прочитать ([Sheet1$]).Чтение файла Excel с помощью C# - выбор листа

this.dataAdapter = 
    new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString); 

Можно ли выбрать первый лист, независимо от того, какое имя?

спасибо.

ответ

5

Смотрите этот ответ о том, как получить список имен листов в порядке: Using Excel OleDb to get sheet names IN SHEET ORDER

И вот моя версия, которая немного короче:

public static IEnumerable<string> GetExcelSheetNames(string excelFile) 
{ 
    var connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
      "Data Source=" + excelFile + ";Extended Properties=Excel 8.0;"; 
    using (var connection = new OleDbConnection(connectionString)) 
    { 
     connection.Open(); 
     using (var dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null)) 
     { 
      return (dt ?? new DataTable()) 
       .Rows 
       .Cast<DataRow>() 
       .Select(row => row["TABLE_NAME"].ToString()); 
     } 
    } 
} 
+0

Это работает, но имейте в виду, что кажется, он также возвращает другие вещи, а не просто листы, поэтому вам может понадобиться отфильтровать их (я не могу вспомнить сейчас, но я думаю, что это были названия диапазонов или что-то подобное, что тоже появилось в списке). –

+0

Спасибо. BTW «Расширенные свойства = Excel 8.0» не открывает xlsx, нужно использовать «Расширенные свойства = Excel 12.0». –

Смежные вопросы