2013-12-12 102 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是的! – 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(); 
     }