【发布时间】:2019-01-03 11:27:35
【问题描述】:
我需要将数据从 Excel 工作表移动到数据库。为此,我创建了 ADODB 连接,并且能够执行这样的 SQL 查询:
INSERT INTO myTable SELECT * FROM [Excel 12.0 Macro;HDR=Yes;Database=C:\MyPath\MyFile.xlsb].[Shee1$A1:C100]
我的问题是范围不能超过 255 列,即 IU 列。我想尝试改用命名范围,但找不到合适的符号。我找到的所有示例都直接连接到工作簿,并使用SELECT * FROM [Sheet1$] 参考或SELECT * FROM myRange 作为命名范围的示例。我试过像
[Excel 12.0 Macro;HDR=Yes;Database=C:\MyPath\MyFile.xlsb].[myRange]
[Excel 12.0 Macro;HDR=Yes;Database=C:\MyPath\MyFile.xlsb].[myRange$]
[Excel 12.0 Macro;HDR=Yes;Database=C:\MyPath\MyFile.xlsb].myRange
[Excel 12.0 Macro;HDR=Yes;Database=C:\MyPath\MyFile.xlsb;Name=myRange]
,但没有成功。
在这里使用命名范围的正确方法是什么?它甚至有助于解决列数限制吗?
我预计 [Excel 12.0 Macro;HDR=Yes;Database=C:\MyPath\MyFile.xlsb].[myRange] 可以工作,但它会引发以下错误:“Microsoft Access 数据库引擎找不到对象“myRange”。确保对象存在 (...)'
我可以通过将数据从源工作表复制到临时工作表来解决这个问题,并将其限制在 255 列限制内,但如果以正确的方式做到这一点会很棒。
【问题讨论】:
-
命名范围是动态的还是静态的? Dynamic 不适用于 ADO。
-
名称的范围是什么 - 工作表或工作簿?
-
@buran 我想在工作表中动态命名特定范围,然后在查询中引用它,然后循环执行,因为它是一张表中的多个小表。
-
多年前,Excel 被限制为 255 或 256 列。我怀疑尝试连接到 Excel 可能会遇到此限制:提供程序可能未设计为请求/查看超过该数量的列和/或 Excel 未设计为提供超出该数量的列的列。这也可能与 Access 表中 255 个字段的限制有关。
-
使用命名范围应该可以解决列号问题(假设命名范围本身不超过 255 列,并且源工作簿已关闭)。我认为我们缺少有关如何/何时创建这些名称的相关代码。