Delphi FireDac打开excel xlsx文件

Posted

技术标签:

【中文标题】Delphi FireDac打开excel xlsx文件【英文标题】:Delphi FireDac open excel xlsx file 【发布时间】:2019-08-26 07:08:15 【问题描述】:

我正在尝试使用 FireDAC Delphi Rio 10.3.2 打开 Excel(xlsx) 文件。我做了以下代码:

FDConnection.Params.Clear;
FDConnection.Params.Add('Database=<myfile>');
FDConnection.Params.Add('ODBCDriver=Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)');
FDConnection.Params.Add('DriverID=ODBC');
FDConnection.Params.Add('ODBCAdvanced=HDR=No');
FDConnection.Open;

我注意到 Delphi Rio FireDAC 最高支持 Excel 97-2003

这是我在使用 FDConnection for xlsx 文件时遇到的错误:

谁能指导一下如何用FireDAC打开Excel(xlsx)文件?

【问题讨论】:

两件事:1) 你遇到什么问题阻止你连接到你想要的 Excel 文件? 2) 你真的需要使用 FireDAC + ODBC - 使用 TAdoConnection 和 MS Jet 4.0 OLE DB 驱动程序连接到 Excel 文件工作正常。 如果我选择 xlsx,我会在打开 FDConnection 时遇到异常。使用 FireDAC 我可以使用 SQL 查询,而使用 TADOConnection 则不能。 您在 TADOConnection 中使用了什么 SQL?您使用 TFDConnection 得到的异常实际上说明了什么?如果您需要有关 SO 的帮助,您应该提供这样的信息,而无需被询问。 我知道 FD 和 ADO,谢谢。 Ime,FD + Excel 存在 ADO 不会出现的问题,这就是我问的原因。无论如何,我已经完成了这个q。我建议你提供一个正确的minimal, reproducible example,而不是截图和不完整的细节。 【参考方案1】:

使用COM Access to Excel比较容易,如下:SO:ADO access to Excel,但如果你坚持使用FireDAC,则需要以下步骤(检查了Delphi 10.2.3 Tokyo和MS Office 2016,没试过深入挖掘 FireDAC 不执行这些操作的原因):

    在“公式”->“定义名称”中为包含要访问的数据(带有标题)的单元格定义名称 Excel 必须正在运行并且应该打开工作簿(您可以使用 COM 启动 Excel 并确保工作簿已打开)。 如果通过插入/修改/删除数据更改了工作簿,则必须保存工作簿。

如果上述任何一项未完成,您将看到非常有意义的消息:外部表不是预期格式

因为您需要 COM 访问 Excel 以确保工作簿在 Excel 中打开,我建议使用方法 2) from:Excel sheet to Grid

【讨论】:

您使用的是 64 位 Win10,如果是,是哪个版本? Windows 10 专业版 64 位版本 1803 我做了你提到的所有事情。对于使用 ADO,需要 ODBC DSN,我试图避免这种情况,因为我的客户对 ODBC DSN 一无所知。我必须为客户提供一个简单的解决方案。他打开一个 excel 文件,我的应用程序将为他生成数据。我用我提到的相同代码成功地使用了 xls 文件,没有任何例外。 TFDPhysODBCDriverLink 没有 xlsx 驱动程序,只有 Microsoft Excel 驱动程序 (*.xls)。

以上是关于Delphi FireDac打开excel xlsx文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用XlsReadWriteII在Delphi中读取Excel文件

怎么在delphi中读取Excel数据 转

怎么在delphi中读取Excel数据 转

AnyDAC (FireDAC) - 在 TBlobField.GetAsString 之后打开事务

如何用DELPHI读写EXCEL文件

delphi 读取xml