ADO与Delphi XE中的XLSX文件

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

  • 用标签读取单元格不返回结果
  • 导出网格时出现“无效浮点”。

我们也注意到,在微软的网站上有许多版本的ACE 12驱动程序(通过Access数据库驱动程序可执行文件),并且它们每个都与Delphi有不同的问题。

考虑到这些事情,

  1. 在这一点上使用Excel的ADO不好?
  2. 是否有其他人有这些问题,你做了什么来解决它们(除了使用XLS文件而不是XLSX)?

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

取决于你所能安装的软件

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

2)如果你不想依靠安装商业Excel,你可以尝试用OpenOffice读取XLSX文件。 香草OpenOffice只能阅读他们,但其他一些发行版也可以写。 OpenOffice还公开了基于COM和基于HTTP的外部API。 我知道delphi的Delphi项目有相互作用,但个人并没有使用它们,除了注意到这个方法,我可以不详细地评估它。

3)微软也曾经出售过Office for Developers或者类似软件,它们可以让Access和Excel内核成为可再发行的软件,你可以通过你的应用程序并安装并使用它们。 不知道,如果它仍然可行。

4)有一套商业组件直接读写这些文件而无需外部EXE的工作。 虽然这将是最快速的工作方式,但它只支持一些function子集(对于您的特定目标可能会或可能不会),并且可能会遇到“未来兼容性”问题,因为微软将推出更新版本的XLS和XLSX格式(这也可能是你的一些或不关心)。 像Biff8格式的TXLSFile一样,例如OExport库 。 还有一个着名的TMS工作室的组件,也许还有一些 。

5)您可以join一些开源项目,并尝试根据您的需求进行增强,然后再依赖于您需要的子集数量。

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

我真的只有发现有可能通过COM操作Excel。 我已经尝试过其他方法,比如ADO,但是他们似乎总是充满了古怪的错误 – 或者只是我的无知。

COM在某些地区肯定是缓慢的。 我已经使用了COM和(在Excel文件中)VBA的组合来实现我需要做的事情。

鉴于Excel不会消失,但微软不能依靠不背叛他们的用户,例如,取消VBA和COM支持,这将是伟大的,如果有人,在某个地方(我希望我有技能)可以从Delphi中为Excel创build一些适当的支持。