如何使用OLEDB查询从Excel获取列名,如果列名不是从第一行开始的?

3

我在OLEDB查询中遇到了两个问题。

(问题1)

我需要获取用户上传的Excel表格的列名。 我的Excel连接字符串为

connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+fileNameAndPath+";
Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";

然后我将使用这个命令。
connection.Open();

DataTable schemaTable = connection.GetSchema("Columns");
Taking column name from each datarow like this
string name = (string)row["COLUMN_NAME"];

如果Excel表格中列名在第一行出现,那么查询就可以正常工作。但如果列名不在第一行,则查询会将列名识别为"F1,F2,..."。有没有办法告诉查询从哪一行开始获取列名,以解决这个问题?请注意保留HTML标记。

(问题2)

与列标题类似,我需要从Excel中选择特定范围内的数据,例如从第3行到第12行取数据。因此,我使用了以下查询语句:

Select RepName, Country from [Sheet1$3:12].

但是它抛出了异常,消息是“一个或多个必需的参数没有给出值。”

我的查询语句是否有语法错误?

如果有,请问如何纠正查询语句?


我认为问题2可能是问题1的结果。不幸的是,这种与电子表格交互的方法只会使用它认为是数据范围的第一行来作为列名。如果您可以控制用户上传电子表格的格式,我建议将列标题移动到第一行。如果不能,您必须使用F1F2而不是RepnameCountry来引用您的列名。 - Pynner
嗨Pynner,问题2不是问题1的结果。我通过在选择语句中给出范围来解决问题2,但我无法解决问题1。 - user1294617
1个回答

1

问题1无法通过OLEDB解决,Excel不是数据库,它唯一能做的就是使用第一行作为列名或者如果第一行为空,则使用F1等。

您唯一可以解决此问题的方法是使用Interop删除空行,然后通过OLEDB查询,或通过Interop解析整个工作表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接