【问题标题】:ADO with XLSX files in Delphi XEDelphi XE 中带有 XLSX 文件的 ADO
【发布时间】:2013-02-26 23:26:30
【问题描述】:

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

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

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

考虑到这些,

  1. 此时将 ADO 与 Excel 一起使用是否不好?
  2. 还有其他人有这些问题吗?您采取了哪些措施来解决这些问题(除了使用 XLS 文件而不是 XLSX)?

【问题讨论】:

    标签: excel delphi oledb ado ms-jet-ace


    【解决方案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 格式(这又可能与您有些或无关)。就像 Biff8 格式有 TXLSFile 一样,例如有 OExport library。还有一个来自著名的 TMS Studio and maybe some more 的组件。

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

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

    【讨论】:

    • 感谢您的回答和信息。这就是我们所想的,但不知道这是否是常识。在其他应用程序中,我们使用了其他方法来使用 Excel,因此听起来我们手头有一个项目来更改 ADO 代码。
    • COM 灵活简单,但速度较慢。这也取决于 Delphi 版本。在 XE2 中,我遇到了在 XE3 作为付费升级发布之前的最后一次更新中引入的主要错误:-/ 就我个人而言,现在我只对非常有限的功能子集和仅导出感兴趣,因此我咬牙切齿地选择了选项 5 :-)
    • 另外,你似乎是这里的新手,所以请看google.ru/… 这是新手的陷阱,我记得我在 SO 上几个月后感到羞愧 :-) // / 鉴于 Microsoft 正在弃用 OLE DB,恕我直言,ADO Win32 也应被视为弃用。不了解 ADO.Net 所以我敢打赌 MS 不会在新 Office 与旧框架的兼容性方面投入太多精力。
    【解决方案2】:

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

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

    鉴于 Excel 不会消失,但不能依赖 Microsoft 不会背叛其用户,例如取消 VBA 和 COM 支持,如果有人在某处(我希望我有技能)可以为 Delphi 的 Excel 创建一些适当的支持。

    【讨论】:

      猜你喜欢
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      相关资源
      最近更新 更多