2013-02-20 143 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并提取列名的表 - 确保它包含您所期望的列名(以及格式你期望)