如何使用列名从数据表中获取数据

我有一个情况,我用Excel文件加载数据集。 所有的工作表都作为datatable加载与相应的工作表名称作为数据表名称。 我想要做的是使用列名获取这个数据表的值。 但是我没有得到错误的说法

“列'执行'不属于表格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)); } 

excel中的数据可以很好地加载到每张纸上。 但是按列名取得是问题所在。

任何build议,请

对于它的价值,这是我使用的代码,工作正常。 我假设你正在使用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无法在每列的顶部单元格中find文本,则会恢复为缺less标题名称的F1F2F3 …符号。 所以,例如,如果我的Excel工作表看起来像这样:

 Header1 Header3 Value1 Value3 Value5 Value2 Value4 Value6 

然后在DataTable我将得到名为Header1F2Header3列。

你还需要确保你指定的行标题行没有任何行上的文本,否则你会得到一堆Fntypes的标题,然后是其他意想不到的文本作为标题名称。 例如:

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

将最终在DataTable的标头This is my tableF2F3

尝试枚举(通过debugging模式和/或控制台)通过wsheet.Name.Columns并提取列的名称 – 确保它包含您所期望的列名称(和您所期望的格式)