gpt4 book ai didi

sql - 无法在 Excel 中查询名称中带有空格的工作表上的命名范围

转载 作者:行者123 更新时间:2023-12-02 07:39:34 25 4
gpt4 key购买 nike

我有一个包含多个工作表的工作簿,每个工作表都有相同的一组命名范围(即它们的范围仅限于工作表,而不是工作簿)。

我想根据任何工作表上的命名范围进行查询。有些工作表的名称不带空格,而另一些工作表的名称则带空格。

我可以轻松地为没有空格的人执行此操作,但使用空格执行此操作的语法让我无法理解(并且在谷歌上搜索了一个小时)。

命名范围为“Ingredients”,一张纸命名为“NoSpaces”,另一张纸命名为“With Spaces”

以下是适用于“NoSpaces”工作表的代码:

sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dictNewRecipesToCheck(arrKeys(0)) & ";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;"""
strQuery = "Select * from [NoSpaces$Ingredients]"
Set objConn = New ADODB.Connection
Set objRecordSet = New ADODB.Recordset
objConn.Open sConnString
objRecordSet.Open strQuery, objConn

我已针对“With Spaces”工作表尝试了以下所有操作:

strQuery = "Select * from [With Spaces$Ingredients]"
strQuery = "Select * from ['With Spaces'$Ingredients]"
strQuery = "Select * from ['With Spaces$'Ingredients]"
strQuery = "Select * from [With_Spaces$Ingredients]"

每次我都会收到“Microsoft Access 数据库引擎找不到对象...”错误。

正如我所提到的,它适用于名称中没有空格的所有工作表。

任何帮助使其在带有空格的工作表上工作,我们将不胜感激。

谢谢!

根据以下评论进行更新:

Excel 2007

sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileLoc & ";Extended Properties=""Excel 12.0 Macro;HDR=No;IMEX=1;"""

当运行 @shahkalpesh 提供的架构代码时,它将 TABLE_NAME 列为两个命名范围的“成分”(即使每个范围都限定在不同的工作表中)。
使用此驱动程序,甚至 [NoSpaces$Ingredients] 也不起作用。

sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFileLoc & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""

当运行@shahkalpesh提供的模式代码时,它将TABLE_NAME列为“NoSpaces$Ingredients”和“'With Spaces'$Ingredients”。使用此驱动程序,[NoSpaces$Ingredients] 工作正常(ACE 驱动程序则不然)。
但是,使用架构报告的确切名称,['With Spaces'$Ingredients] 不起作用。

Excel 2013

sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileLoc & ";Extended Properties=""Excel 12.0 Macro;HDR=No;IMEX=1;"""

当运行@shahkalpesh提供的模式代码时,它将TABLE_NAME列为“NoSpaces$Ingredients”和“'With Spaces$'Ingredients”。使用此驱动程序,[NoSpaces$Ingredients] 工作正常,但 ['With Spaces'$Ingredients] 不起作用。

最后请引用http://db.tt/3lEYm2g1有关在 Excel 2007 中创建的示例工作表,该工作表在(至少)2 台不同的计算机上存在此问题。

最佳答案

是否可以使用 Excel 范围而不是命名范围?我有以下工作:

SELECT * FROM [Report 1$A4:P]

我从 GetOleDbSchemaTable() 方法获取工作表名称并删除撇号。带撇号的工作表名称对我来说不适用于范围。

if (tableName.Contains(' '))
tableName = Regex.Match(tableName, @"(?<=')(.*?)(?=\$')", RegexOptions.None).Value + "$";

关于sql - 无法在 Excel 中查询名称中带有空格的工作表上的命名范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15731047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com