1

这里的问题是 ADO 与 Excel 的连接——这仍然是在 Dephi XE 环境中读/写 excel 文件的标准方法吗?我们在使用 ACEOLEDB 驱动程序 (ACE 12) 读取/写入时遇到了多个问题,其中包括

  • 读取带有主题标签的单元格不会返回结果
  • 导出网格时出现“无效浮点”。

我们还注意到,在 Microsoft 的网站上有许多版本的 ACE 12 驱动程序(通过 Access Database 驱动程序可执行文件),并且每个版本似乎都与 Delphi 存在不同的问题。

考虑到这些,

  1. 此时将 ADO 与 Excel 一起使用是否不好?
  2. 还有其他人有这些问题吗?你做了什么来解决这些问题(除了使用 XLS 文件而不是 XLSX)?
4

2 回答 2

1

Delphi 中的 ADO 倾向于 TDataSet 模型,这意味着严格的表格数据...... Excel 不是。每个 excel 表都有一个随机填充的单元格,其中一些可能构成准表格范围,也可能不构成。

根据安装的软件,您可以

1) 使用 Excel 应用程序打开 XLSX,读取单元格并将它们传递给您的程序。这是最简单和兼容的方法,但由于 COM IPC 编组和切换而明显缓慢。有一些技巧可以固定它,比如隐藏 Excel 窗口、复制数据数组而不是逐个单元格的方法等。
开始探索TExcelApplication组件 - http://docwiki.embarcadero.com/RADStudio/XE3/en/Using_Component_Wrappers

2) 如果您不想依赖安装商业 Excel,您可以尝试使用 OpenOffice 读取 XLSX 文件。Vanilla OpenOffice 只能读取它们,但其他一些发行版也可以编写它们。OpenOffice 还公开了基于 COM 和基于 HTTP 的外部 API。我知道有 Delphi 的 Delphi 项目 - OOo 交互但个人没有使用它们,除了注意到这种方法我不能说它没有详细的评估。

3) Microsoft 也曾经销售 Office for Developers 或类似产品,它为您提供 Access 和 Excel 内核作为可再发行组件,您可以将其与您的应用程序一起传递并安装并使用它们。不知道它是否仍然可行。

4)有一组商业组件直接读写这些文件,不需要外部EXE来完成这项工作。虽然这将是最快的工作方式,但它仅支持某些功能子集(对于您的特定目标可能适用也可能不适用),并且可能在“未来兼容性”方面遇到问题,因为微软将推出 XLS 的更新版本和 XLSX 格式(您可能再次关心或不关心)。就像TXLSFileBiff8 格式一样,例如OExportlibrary。还有一个来自著名的 TMS Studio 的组件,也许还有更多

5)您可以加入一些开源项目并尝试根据您的需要对其进行增强,然后再次取决于您需要多少子集。

我知道,很多人成功地使用 OLE DB 来访问 Excel 数据,但对我来说,这听起来总是有些 perversino,因为 Excel 文件根本没有任何内部规则数据排列,不像严格的表格 RDBMS 那样。

于 2013-03-12T07:15:32.553 回答
1

我真的只发​​现可以通过 COM 操作 Excel。我已经尝试过替代方案,比如 ADO,但它们似乎总是充满了神秘的错误——或者这可能只是我的无知。

COM 在某些领域肯定很慢。我使用了 COM 和(在 Excel 文件中)VBA 的组合来实现我需要做的事情。

鉴于 Excel 不会消失,但不能指望微软不会背叛其用户,例如,取消 VBA 和 COM 支持,如果有人在某个地方(我希望我有技能)那就太好了可以为 Delphi 的 Excel 创建一些适当的支持。

于 2014-06-04T16:02:01.387 回答