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 格式(您可能再次关心或不关心)。就像TXLSFile
Biff8 格式一样,例如OExport
library。还有一个来自著名的 TMS Studio 的组件,也许还有更多。
5)您可以加入一些开源项目并尝试根据您的需要对其进行增强,然后再次取决于您需要多少子集。
我知道,很多人成功地使用 OLE DB 来访问 Excel 数据,但对我来说,这听起来总是有些 perversino,因为 Excel 文件根本没有任何内部规则数据排列,不像严格的表格 RDBMS 那样。