2013-02-20 172 views
0

我有一種情況,我用excel文件加載數據集。所有的工作表都作爲數據表格加載,並將適當的工作表名稱作爲數據表名稱。我想要做的是使用列名獲取這個可數據值。但我沒有得到錯誤說如何使用列名從數據表中獲取數據

「列'執行'不屬於表Sheet1」。

雖然裝載excel到datatabel我已經使用HDR = YES和IMEX = 1。我也嘗試過使用HDR = NO。沒有任何工作。

以下代碼是寫擅長於數據表

從Excel加載
foreach (Microsoft.Office.Interop.Excel.Worksheet wsheet in workbook.Worksheets) 
{ 

    string sql1 = "SELECT * FROM [" + wsheet.Name + "$]"; 
    OleDbCommand selectCMD1 = new OleDbCommand(sql1, SQLConn); 
    SQLAdapter.SelectCommand = selectCMD1; 

    SQLAdapter.Fill(dataset.Tables.Add(wsheet.Name)); 

} 

數據到每個片材完美。但是按列名取得是問題所在。

任何建議請

+1

我不知道它有多大用它做的,但我不知道爲什麼你使用'SQLDataAdapter'而不是'OleDbDataAdapter'?我只是嘗試了你的代碼,但使用'OleDbDataAdapter',它工作正常(即我有列名)。 – 2013-02-20 16:55:49

+0

其實我的代碼是oledb,我創建的對象就像這樣OleDbDataAdapter SQLAdapter = new OleDbDataAdapter();我知道這很瘋狂......但是,謝謝,你給了一個答案,它的工作。 – Vincent 2013-02-21 12:11:34

+0

對,我明白了。我以爲你可能會使用[this](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter(v = vs.71).aspx)。無論如何,很高興我能幫上忙。 – 2013-02-21 16:54:13

回答

1

爲什麼它的價值,這是我使用的代碼,它工作正常。我假設你正在使用Interop來遍歷工作表,以確保你能夠順利完成它們。

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + 
    "; Extended Properties=\"Excel 12.0 XML;HDR=YES\""; 
DataSet dsValues = new DataSet(); 

using (OleDbConnection conn = new OleDbConnection(connectionString)) 
{ 
    conn.Open(); 

    using (OleDbCommand cmd = conn.CreateCommand()) 
    { 
     using (OleDbDataAdapter adapter = new OleDbDataAdapter()) 
     { 
      foreach (Excel.Worksheet wsheet in workbook.Worksheets) 
      { 
       cmd.CommandText = "SELECT * FROM [" + wsheet.Name + "$]"; 
       adapter.SelectCommand = cmd; 
       adapter.Fill(dsValues.Tables.Add(wsheet.Name)); 
      } 
     } 
    } 
} 

如果OleDbDataAdapter找不到在每一列的頂部細胞的文字,然後將其恢復爲F1F2F3 ...符號失蹤的頭名。因此,舉例來說,如果我的Excel工作表看起來是這樣的:

Header1   Header3 
Value1 Value3 Value5 
Value2 Value4 Value6 

然後在DataTable我會列名爲Header1F2Header3

您還需要確保您指定爲標題行的行在其上方的任何行中都沒有文本,否則您將獲得一堆Fn類型標題,然後將其他意外文本作爲標題名稱。例如:

 This is my table 
Header1 Header2 Header3 
Value1 Value3 Value5 
Value2 Value4 Value6 

將結束與F3This is my table頭,F2,數據表等

1

嘗試枚舉(在調試模式和/或控制檯)通過wsheet.Name.Columns並提取列名的表 - 確保它包含您所期望的列名(以及格式你期望)