Excel宏执行SQL查询遇同名列仅读取首个PCR列问题咨询
Excel宏SQL查询多列重名问题解决方法
当通过ACE.OLEDB接口查询Excel区域时,遇到同区域多列重名的情况,直接写列名默认只会返回从左到右第一个匹配的列,在不允许修改源表列名的前提下,优先用相对列位置索引的方案解决,操作逻辑如下:
- 该查询引擎支持用
F+数字的格式指代查询范围内的列,数字从1开始计数,对应你指定查询范围的相对位置,和Excel本身的全局列号无关 - 你当前指定的查询范围是
[Book$B2:H],因此B列为范围第1列(对应F1)、C列为范围第2列(对应F2),后续列依次顺延计数 - 数清楚你需要提取的加粗PCR列在B:H这个区间内的排位,比如目标PCR是该范围内的第6列,就把原SQL替换为按位置取数的写法,同时可以用AS给取出的列设置别名,不会修改源数据:
"Select F1 AS [code], F2 AS [name], F6 AS [PCR] from [Book$B2:H]"
校验小技巧:如果怕数列数出错,可以先执行一句无数据查询
"Select * from [Book$B2:H] where 1=0",遍历返回记录集的Fields集合,就能看到每个位置对应的列名,直接定位到你需要的PCR对应的F序号即可,不会取错。
不推荐使用的方案:直接用SELECT *取全量字段时,引擎会自动给重名列加后缀生成PCR、PCR1、PCR2这类字段名,但后缀生成顺序和引擎版本、区域选择逻辑强相关,稳定性差,容易取错列,不要在正式宏里用这个逻辑。
内容的提问来源于stack exchange,提问作者Tomas Medero
相关产品推荐
相关产品推荐

