我赞同这样的观点:这确实是 Excel/OleDb 中的一个错误。 @ubaidashrafmasoody 是正确的,我今天重现了相同的行为。另一个提供的答案是,可以通过设置来修复
Extended Properties="Excel 8.0;IMEX=1"
似乎不正确,因为我遇到了这种行为,并且已经在我的连接字符串中设置了此行为。
错误行为的细节是这样的(尽管编辑可能是这样的:如果最后一列在前几行(大概是 8 行)中有(大多数)空单元格,则该列不会出现在任何 SQL 语句的范围内(这会在某些编辑后任意修复,正如 @ubaidashrafmasoody 所描述的那样。)例如,如果我有五列,Column1、Column2、Column3、Column4 和 Column5,其值(标题行中的 Column5 除外)为空, 然后:
SELECT * From [Sheet1$]
只会返回 4 列。
如果我只列出其中四列,例如:
SELECT [Column1], [Column2], [Column3], [Column4] From [Sheet1$]
然后它会正确返回。但如果我命名第五列:
SELECT [Column1], [Column2], [Column3], [Column4], [Column5] From [Sheet1$]
然后它会出错并显示一条消息,指出未指定 [Column5] 的参数值。或者,如果没有括号,则表示不存在这样的字段。
甚至在 SQL 语句中明确指定范围:
SELECT [Column1], [Column2], [Column3], [Column4], [Column5] From [Sheet1$A1:E55]
or
SELECT * From [Sheet1$A1:E55]
无法检索第五列。
然而,一个简单的“修复”是添加一个新的空白列,名为例如在此之后的第 6 栏。突然,Column5 变得可见,尽管它是 NULL。