Excel sheet ADODB 查询的名称问题
Excel sheet name issues for ADODB queries
我一直在使用 ADODB 查询编写一些宏来从其他工作簿中检索数据,使用 Excel 2013。在测试期间,在某些情况下出现 'invalid bracketing' 错误并且经过反复试验,我来了得出的结论是 ADODB 无法处理 sheet 包含 一个点后跟一个 space 的名称。换句话说:
XYZ S.à r.l. -12.2017 -> error
XYZ S.à r.l -12.2017 -> works ok (dot before space is deleted)
XYZ S.à r.l.-12.2017 -> works ok (space after dot is deleted)
当然在查询中 sheet 名称被反引号括起来:-)
错误消息 -2147217900 是;名称 'XYZ S.à r.l. -12.2017$A9:H49'
的括号无效
我的问题是:您是否知道我应该跟踪的任何其他类似问题?有任何记录吗?
更新:生成的 SQL 语句(但同样,这已经在许多其他工作簿中成功测试,我设法通过重命名 2 个工作中的第一个 sheetss 如上所述)
select cstr(pr.reference), pr.[name],null, pr.item, pr.country, pr.currency, pr.maturity, pr.sector
from [Excel 12.0 Xml;HDR=Yes;Database=\mydomain.com\someLongPath\XYZ S.à r.l. - 12.2017 - reviewed - MACRO TESTING.xlsx].`XYZ S.à r.l. -12.2017$A9:H49` pr
where cstr(pr.reference) not in (select cur.reference from [Excel 12.0 Xml;HDR=Yes;Database=\mydomain.com\someLongPath\KB Sarl - 01.2018 to 03.2018 - MACRO TESTING.xlsx].`TB - 03.2018$A9:H51`cur )
and pr.item is not null
此查询从当前列表中缺少引用的上一个列表中获取数据。上一个和当前列表通常在不同的工作簿中。
只是为了结束这个问题:
我得出的结论是 ADODB 无法处理包含点后跟 space(“.
”)的工作表名称。
因此,我只是为此添加了一个检查。
我处理过一个完全相同的问题。一种可能的解决方案是将 .
+ Space 替换为 #
+ Space 作为在 TableName=Replace(Tablename,". ","# ")
。显然 #
对于 Access 来说已经足够好了。这个建议来自from here.
我一直在使用 ADODB 查询编写一些宏来从其他工作簿中检索数据,使用 Excel 2013。在测试期间,在某些情况下出现 'invalid bracketing' 错误并且经过反复试验,我来了得出的结论是 ADODB 无法处理 sheet 包含 一个点后跟一个 space 的名称。换句话说:
XYZ S.à r.l. -12.2017 -> error
XYZ S.à r.l -12.2017 -> works ok (dot before space is deleted)
XYZ S.à r.l.-12.2017 -> works ok (space after dot is deleted)
当然在查询中 sheet 名称被反引号括起来:-)
错误消息 -2147217900 是;名称 'XYZ S.à r.l. -12.2017$A9:H49'
我的问题是:您是否知道我应该跟踪的任何其他类似问题?有任何记录吗?
更新:生成的 SQL 语句(但同样,这已经在许多其他工作簿中成功测试,我设法通过重命名 2 个工作中的第一个 sheetss 如上所述)
select cstr(pr.reference), pr.[name],null, pr.item, pr.country, pr.currency, pr.maturity, pr.sector
from [Excel 12.0 Xml;HDR=Yes;Database=\mydomain.com\someLongPath\XYZ S.à r.l. - 12.2017 - reviewed - MACRO TESTING.xlsx].`XYZ S.à r.l. -12.2017$A9:H49` pr
where cstr(pr.reference) not in (select cur.reference from [Excel 12.0 Xml;HDR=Yes;Database=\mydomain.com\someLongPath\KB Sarl - 01.2018 to 03.2018 - MACRO TESTING.xlsx].`TB - 03.2018$A9:H51`cur )
and pr.item is not null
此查询从当前列表中缺少引用的上一个列表中获取数据。上一个和当前列表通常在不同的工作簿中。
只是为了结束这个问题:
我得出的结论是 ADODB 无法处理包含点后跟 space(“.
”)的工作表名称。
因此,我只是为此添加了一个检查。
我处理过一个完全相同的问题。一种可能的解决方案是将 .
+ Space 替换为 #
+ Space 作为在 TableName=Replace(Tablename,". ","# ")
。显然 #
对于 Access 来说已经足够好了。这个建议来自from here.