Sql 无法在Excel中查询名称中带有空格的工作表上的命名区域
我有一个包含多个工作表的工作簿,每个工作表都有一组相同的命名范围(即它们的范围是工作表,而不是工作簿) 我想根据任何图纸上的命名范围进行查询。有些图纸的名称没有空格,而有些图纸的名称有空格 我可以很容易地为那些没有空间的人做这件事,但是我不知道用空间做这件事的语法(还有一个小时的谷歌搜索) 命名范围为“配料”,其中一张命名为“无空间”,另一张命名为“带空间” 下面是适用于“NoSpaces”工作表的代码: 对于“带空格”工作表,我尝试了以下所有方法: 每次,我都会收到“Microsoft Access数据库引擎找不到对象…”错误 正如我提到的,它适用于名称中没有空格的所有图纸 任何帮助,使这与空间工作表,将不胜感激 谢谢 根据以下评论更新: Excel 2007Sql 无法在Excel中查询名称中带有空格的工作表上的命名区域,sql,excel,named-ranges,vba,Sql,Excel,Named Ranges,Vba,我有一个包含多个工作表的工作簿,每个工作表都有一组相同的命名范围(即它们的范围是工作表,而不是工作簿) 我想根据任何图纸上的命名范围进行查询。有些图纸的名称没有空格,而有些图纸的名称有空格 我可以很容易地为那些没有空间的人做这件事,但是我不知道用空间做这件事的语法(还有一个小时的谷歌搜索) 命名范围为“配料”,其中一张命名为“无空间”,另一张命名为“带空间” 下面是适用于“NoSpaces”工作表的代码: 对于“带空格”工作表,我尝试了以下所有方法: 每次,我都会收到“Microsoft Acc
sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileLoc & ";Extended Properties=""Excel 12.0 Macro;HDR=No;IMEX=1;"""
当运行@shahkalpesh提供的模式代码时,它将表_名称列为两个命名范围的“成分”(即使每个范围都限定在不同的表中)。使用此驱动程序,即使[NoSpaces$Components]也无法工作
sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFileLoc & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""
当运行@shahkalpesh提供的模式代码时,它将表_名称列为“NoSpaces$contracents”和“With Spaces'$contracents”。使用此驱动程序,[NoSpaces$Components]工作正常(使用ACE驱动程序时没有)。但是,使用schema报告的确切名称,['With Spaces'$contracents]不起作用
sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFileLoc & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""
Excel 2013
sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileLoc & ";Extended Properties=""Excel 12.0 Macro;HDR=No;IMEX=1;"""
当运行@shahkalpesh提供的模式代码时,它会将表_的名称列为“NoSpaces$components”和“With Spaces$'components”。使用此驱动程序,[NoSpaces$contracents]可以正常工作,但['With Spaces'$contracents]不起作用
sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFileLoc & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""
最后,请参阅Excel 2007中创建的一个示例工作表,该工作表在(至少)两台不同的机器上都有此问题。工作表的名称(后跟空格和命名范围)可以写成['My sheet$'MyData] 下面是列出工作簿中包含的表的方法
dim i as Integer
Set objRecordSet = objConn.OpenSchema(adSchemaTables)
Do While Not objRecordSet.EOF
i = 1
For i = 0 To objRecordSet.Fields.Count - 1
Debug.Print objRecordSet.Fields(i).Name, objRecordSet.Fields(i).Value
Next
objRecordSet.MoveNext
Loop
1) 获取工作簿中表列表的代码
dim i as Integer
Set objRecordSet = objConn.OpenSchema(adSchemaTables)
Do While Not objRecordSet.EOF
i = 1
For i = 0 To objRecordSet.Fields.Count - 1
Debug.Print objRecordSet.Fields(i).Name, objRecordSet.Fields(i).Value
Next
objRecordSet.MoveNext
Loop
编辑:对于您的场景,它将是
strQuery = "Select * from ['With Spaces$'Ingredients]"
EDIT2:对不起,我第一次粘贴的代码是错误的。请使用清单1中的上述代码,并在即时窗口中查找TABLE\u NAME
。以图纸名称为前缀的命名范围列表将显示在表\u名称
上(您可以在其上查询)
此外,请确保指定的范围限定在工作表中。确保工作表名称和范围名称的大小写与查询匹配。下面的查询将起作用。只需确保命名范围成分存在于带有空格的工作表。同时保存工作簿 strQuery=“选择*自[带空格$Components]” 或者,您可以使用下面的 strQuery=“使用“&Chr(32)”和“Spaces$components”从[中选择*”
是否可以使用excel范围而不是命名范围?我做了以下工作:
SELECT * FROM [Report 1$A4:P]
我从GetOleDbSchemaTable()方法获取工作表名称并删除撇号。带撇号的sheetname不适用于我的范围
if (tableName.Contains(' '))
tableName = Regex.Match(tableName, @"(?<=')(.*?)(?=\$')", RegexOptions.None).Value + "$";
if(tableName.Contains(“”))
tableName=Regex.Match(tableName,@“(?又一次迟到了
我无法在这里得到任何响应来处理整个工作表,因此我为整个工作表创建了一个命名范围(选择所有单元格并给它们命名-我称它们为POList),并引用了以下内容:
UPDATE [POList] SET..... etc
因此,没有单引号,没有反勾号,没有$符号,甚至没有工作表名称
话虽如此,所讨论的工作簿只有一页(名称中有空格)
这使用Excel2002(!)和以下连接代码工作
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=C:\Purchase Req No. List.xls; Extended Properties=Excel 8.0;"
.Open
End With
显然,这不适合每个人的情况,这是一个有点笨拙的解决方法,但可能有人会发现它很有用…我遇到了同样的问题,并且能够在没有命名范围的情况下解决。此外,作为我问题的两部分,请确保工作表名称中没有尾随空格。尝试
strQuery = "Select * from ['With Spaces$']"
如果有人在sql查询中使用此查询,请为我完成此工作
select *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0 Xml;Database=YourPath\YourFileName.xlsx;',['name name$']);
工作表名称是“name name”,只是将名称放在单引号之间,我认为这是正确的。但是,当我使用该SQL时,它仍然抛出相同的错误。与$之前的“相同。我开始认为这实际上是驱动程序中的一个错误。如果我将工作表重命名为“with spaces”,并使用“Select*from”['WithSpaces$'Components]”效果很好。重命名为“With Spaces”并使用“Select*from['With Spaces$'Components]”会抛出错误。@user2229491:检查修改后的答案并添加注释,如果没有帮助的话。谢谢。使用上面的代码(或通过adox.catalog.tables)它提供了您期望的名称“With Spaces$”成分。但是在查询中使用它仍然会抛出错误。此外,我确信这不是范围或键入错误等问题,因为我可以删除空格(在实际工作表名称和代码中)并且工作正常。将其放回并抛出错误。@user2229491:Goto“名称管理器”“并检查成分命名范围是否限定在工作表的范围内。如我所述,我可以从adox.catalog对象和架构中获取命名范围,因此它肯定在那里。这是我尝试的第一件事……请参阅我原始帖子中的查询列表。Chr(32)很遗憾,这没有什么区别。@user2229491在我这边工作。您使用的是哪个版本的excel?microsoft access数据库引擎找不到“带空格$”成分的对象。请确保该对象存在,并且正确拼写其名称和路径名。@user2229491错误消息本身是自解释的。C在2010版本中对文件进行u转换