【问题标题】:How to get Column names from Excel using OLEDB query if the column name doesnot start from first row如果列名不是从第一行开始,如何使用 OLEDB 查询从 Excel 中获取列名
【发布时间】:2012-05-14 05:15:54
【问题描述】:

我在 OLEDB 查询中遇到 2 个问题

(问题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,.....”。我该如何解决这个问题?有什么方法可以告诉查询,从哪一行取列名?

(问题2)

与列标题一样,我需要从 excel 中选择特定范围内的数据。比如说从第 3 行到第 12 行取数据。 所以我使用了这样的查询,

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

但是它抛出了异常,像这样的消息“没有为一个或多个必需参数提供值。”

我的查询中有语法错误吗?

如果可以,谁能告诉我如何更正查询?

【问题讨论】:

  • 我认为问题 2 可能是问题 1 的结果。不幸的是,这种与电子表格对话的方法只会使用它认为是数据范围的第一行来命名列。如果您对用户上传的电子表格的格式有任何控制权,我会将列标题移至第 1 行。否则,您必须将列名称为 F1、F2 而不是 Repname 和 @987654327 @
  • 嗨 Pynner,问题 2 不是问题 1 的结果。我通过在 select 语句中给出范围解决了问题 2,但我无法解决问题 1

标签: c# excel oledb


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-08
    • 2020-10-24
    • 2013-08-20
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 2019-05-28
    • 2019-11-01
    相关资源
    最近更新 更多