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

时间:2012-08-28 07:49:24

标签: excel c#-4.0 oledb excel-2003 oledbcommand

enter image description here 我目前的要求是我需要在单个查询中从excel表(DUMMY.xls)中选择多个范围并将其放入DataTable(fooData1): 从上图中可以看出,我有从A到F的列。 因此,我将从A到B以及从D到F的列过滤成单个dataTable(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();
            }

2 个答案:

答案 0 :(得分:2)

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

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

我制作了测试数据:

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的选项,第一行是标题)

希望能解决你的问题。 :)

答案 1 :(得分:0)

嘿,对于您的问题,您可以使用F和列号选择单个列。例如," SELECT * FROM [Sheet1 $ A:B];从[Sheet1 $ D:F]"中选择*;可以重写为:

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