使用OleDb从Excel中select具有多个范围的列

在这里输入图像说明 我目前的需求是我需要从一个单一的查询Excel表(DUMMY.xls)中select多个范围,并把它放到一个DataTable(fooData1):正如你可以从上面的图像看到我有从A到F列。我筛选出从A到B和从D到F到单个数据表(fooData1)的列。 生成的数据表的内容应该是这样的:

NAME ID Date Hobby COLOR DEEPAK 1 Coding Black ASTHA 2 Singing Red GAURAV 3 Dancing Blue BHAVESH 4 6/29/2007 Painting Green 

我的代码是这样的:

并在执行查询时出现以下错误

“SQL语句结束后发现的字符”

  DataTable fooData1 = new DataTable(); System.Data.OleDb.OleDbConnection dbConnection = new System.Data.OleDb.OleDbConnection (@"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=C:\Dummy.xls;" + @"Extended Properties=""Excel 8.0;HDR=Yes;"""); dbConnection.Open(); try { string strSql = "SELECT * FROM [Sheet1$A:B] ; select * from[Sheet1$D:F]"; OleDbCommand cmd = new OleDbCommand(strSql); cmd.Connection = dbConnection; System.Data.OleDb.OleDbDataAdapter dbAdapter1 = new System.Data.OleDb.OleDbDataAdapter(cmd); dbAdapter1.Fill(fooData1); } finally { dbConnection.Close(); } 

它可以通过SQL解决,使用UNION ALL

SELECT * FROM [Sheet1$A:B] UNION ALL select * from[Sheet1$E:F]

我做了如下testing数据:

 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 

和DataTable得到:

 1 2 1 2 5 6 5 6 

(由于HDR=Yes特定选项,第一行是标题)

希望能解决你的问题。 🙂

嘿,至于你的问题,你可以使用F和列号来select单独的列。 例如,“SELECT * FROM [Sheet1 $ A:B]; select * from [Sheet1 $ D:F]”; 可以重写为:

 "SELECT F1,F2,F4,F5 FROM [Sheet1$];"