2013-12-12 4 views
0

Я использую OLEDB для чтения данных из электронной таблицы Excel.Извлечение столбца по заголовку

var connectionString = 
    string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;", fileName); 

var adapter = new OleDbDataAdapter("SELECT * FROM [sheet1$]", connectionString); 
var ds = new DataSet(); 

adapter.Fill(ds, "mySheet"); 
var data = ds.Tables["mySheet"].AsEnumerable(); 

foreach (var dataRow in data) 
    { 
    Console.WriteLine(dataRow[0].ToString());       
    } 

Вместо передачи индекса к DataRow, чтобы получить значение столбца, есть в любом случае, чтобы получить столбец по имени заголовка столбца?

+0

Вы пробовали LinqToExcel? https://code.google.com/p/linqtoexcel/ –

+0

Где вы можете получить заголовки столбцов? Это первая строка листа Excel? –

+0

@ shree.pat18 yep! – clickatwill

ответ

0

Попробуйте этот код:

 var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0; HDR=YES", fileName); 

     var adapter = new OleDbDataAdapter("SELECT * FROM [sheet1$]", connectionString); 
     var ds = new DataSet(); 

     adapter.Fill(ds, "mySheet"); 
     var data = ds.Tables["mySheet"].AsEnumerable(); 

     foreach (DataRow dataRow in data) 
     { 
      Console.WriteLine(dataRow["MyColumnName"].ToString());  
      Console.WriteLine(dataRow.Field<string>("MyColumnName").ToString()); 
     } 

я добавил в 2-х способах доступа данные в строке по столбцу Название.

Надеюсь, что это трюк!

+0

Doh! Не пытались получить доступ по имени. Благодаря!! – clickatwill

0

Измените строку соединения, чтобы указать, что у вас есть заголовки в вашем файле excel.

Вы можете сделать это, установив значение HDR.

См этой ссылка для различных вариаций строки подключения и построить тот, который соответствует вашим потребностям»

http://www.connectionstrings.com/excel/

0

Используйте DataTable, чтобы иметь свои данные.

 string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + **EXCEL FILE PATH** + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; 

     OleDbConnection conn = new OleDbConnection(strConn); 
     conn.Open();    

     OleDbCommand cmd2 = new OleDbCommand("SELECT * FROM [**YOUR SHEET** $]", conn); 
     cmd2.CommandType = CommandType.Text; 

     DataTable outputTable2 = new DataTable("myDataTable"); 

     new OleDbDataAdapter(cmd2).Fill(outputTable2); 

     foreach(Datarow row in outputTable2) 
     { 
      String s = row["yourcolumnheader"].ToString(); 
     } 
Смежные вопросы