【问题标题】:Alternative to ACE.OLEDB.12 for querying Excel data tablesACE.OLEDB.12 的替代方案,用于查询 Excel 数据表
【发布时间】:2014-09-19 08:42:50
【问题描述】:

我目前正在使用ACE.OLEDB.12 查询 Excel 数据表,但我遇到了令人沮丧的提供程序限制。提供程序只能处理前 256 列和 65536 行,因此如果我将任何数据表放在该窗口之外,引擎会返回 range not found 的错误消息。

是否有人知道任何其他数据提供程序可以让我直接从数据表中查询数据,如下例使用ACE.OLEDB.12

SELECT * FROM [Main Sheet$IG7:IU9]

【问题讨论】:

  • 奇怪的是,您在 Excel 中有这种大小的数据集。您是否可以选择以不同的格式(即文本分隔或 CSV)加载数据。另请注意,XLSX 只是一个压缩的 XML 文件,因此您可以尝试自己获取数据。
  • 我有很多表,我正在使用很多列和行,每个表都有很多列和行。我可以使用 VBA 读取数据,但我更喜欢 SQL 路由更简洁。
  • 我很好奇什么样的系统会在 Excel 文件中存储大量数据? Excel 只是一种传输数据的方式,还是您实际上在其中存储了那么多数据?如果将 Excel 用作传输格式,则会出现许多其他问题。文字更清晰。
  • 我们为呼叫中心进行了大量数据预处理,因此不可避免地会使用大量数据。在使用数据库方面存在客户限制和限制,因此我们在 Excel 中构建导入和预处理向导。
  • 我只能建议您将 Excel 文件另存为 CSV 并导入。

标签: sql excel vba oledb aceoledb


【解决方案1】:

我一直使用ADODB 并且遇到同样的问题。到处寻找答案,甚至是on SO,但没有运气。

我发现的唯一解决方法:将您的数据移动到工作表的开头。如果您的数据以 A1 开头,例如Sheet1,只要您仅引用工作表,您的查询就会引入额外的行和列,即SELECT * FROM [Sheet1$]。我没有用 ACE.OLEDB 测试过这个,但它确实适用于 ADODB

【讨论】:

  • 我知道,告诉我。一段时间以来,我一直在努力寻找解决此问题的方法。微软没有解决这个问题,我们仍在苦苦挣扎,这是一种耻辱。我不能将数据放在工作表的开头,因为工作表里满是表格。我可以处理多张工作表的列,但我不能处理行。
  • 好吧,最后的手段是将数据复制到新工作表中并进行查询。这会影响性能,因为您的数据可能非常大。
  • 性能方面还不错。查询实际上运行得非常快。问题是可能超过 65536 的行数。如果发生这种情况,OLEDB 提供商说它无法再找到该表,因为它只处理前 256x65536,基本上是旧的 Excel 限制。
  • 这不是我所说的性能下降的意思。我的意思是,如果您的数据不是从 A1 开始,您可以将数据复制到新工作表中,使其从 A1 开始,查询该数据然后删除临时工作表。
【解决方案2】:

您可以使用ClosedXML 查询 XLSX 文件。当然,它不提供任何 SQL 功能(相反,它的行为类似于 VBA),但具有不需要在目标计算机上安装 Excel 和 AccessDatabaseEngine 的优点。也许值得一看。

【讨论】:

  • 我认为如果我沿着使用代码查询数据的路线走下去,那么我不妨使用 VBA。 SQL 在数据操作方面要强大得多。
  • 抱歉,我完全忽略了 VBA 标签。如果您仍然在 Excel 中工作,我的回答没有任何用处。
猜你喜欢
  • 2014-12-15
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 2018-03-30
相关资源
最近更新 更多