6

我需要使用 Delphi 2010 读取和写入 Excel 电子表格。没什么特别的。只需从不同工作表上的特定单元格和范围读取和写入值。需要在没有安装 Excel 的情况下工作并支持 Excel 2007。

我看过的一些东西:

  • 我试过使用ADO,它可以很好地选择整个工作表中的所有内容,但我没有太多运气阅读特定的单元格或范围。

  • NativeExcel看起来很有前途,但似乎没有积极开发,而且他们不回复电子邮件。

  • Axolot有几个产品。主打产品看似很实用,但价格昂贵。他们有一个精简版,但它不支持 Delphi 2010。

有什么建议吗?免费会很棒,但我对商业解决方案持开放态度,只要它可靠且得到很好的支持。

4

10 回答 10

7

TMS Flexcel - 我知道它看起来像 Excel 的报告组件(它做得很好,并且是您工具包中非常方便的工具),但它还包括用于读取和显示 Excel 文件的组件。Adrian Gallero 对 Excel API(包括 Excel 2007)的了解程度给我留下了深刻的印象。

http://www.tmssoftware.com/site/flexcel.asp

当然不是免费的,但 75 欧元我认为它物有所值。

于 2010-03-17T19:49:50.600 回答
7

如果 Excel 工作表是一个相当直接的行/列布局,我对 ADO 的运气非常好。

我发现,使用 ADO 的关键是将 Excel 工作表视为数据库。如果您的 Excel 工作表主要是直线行和列布局,只需将行视为数据库记录,将列视为字段。首先通过搜索特定的列(字段)值(最好是唯一的)导航到所需的行,然后通过引用作为列名的字段来读取该行中所需的单元格。

如果您的 Excel 工作表格式更自由,那将更加困难。

于 2010-03-17T20:11:16.483 回答
3

不要注销 NativeExcel。我已经用了几年了,效果很好。它快速且用途广泛。我使用它来生成格式精美的多页电子表格,其中包含冻结窗格、单元格中的公式以及来自客户数据库的数据,供他们用于输入,然后发回给我。当我的客户收到我的第一个电子表格时,他们非常激动,因为它极大地减少了他们的工作量,而且使用起来相当直观。

我不知道他们为什么没有回复你,因为我在过去两年中至少更新了他们的包几次。当我的许可证到期时,我肯定打算续签。

于 2010-03-17T21:12:13.723 回答
3

我推荐来自http://www.scalabium.com的 SMImport / SMExport

迈克一直非常乐于助人,而且反应迅速。

于 2010-03-22T11:53:29.077 回答
2

真正有帮助的是,如果您对 excel 文件的布局有某种控制。

我已经建立了一个完整的单元和验收测试框架,其中数据和测试控件都包含在 Excel 电子表格中。

我通过 ADO完成了所有工作。您可以将 ADO SQL 查询限制在整个工作表、命名范围或任何范围内。在我看来和经验中,这种方法非常强大。

有两件事确实给我带来了一些问题:1. 根据工作表的命名方式,ADO 可能会或可能不会看到它们(同样,如果您可以控制布局,那太好了!) 2. 小心 ADO 返回的数据类型当您读取数据时,即它可能将数字显示为字符串。这是因为 ADO 尝试 IIRC 根据前几行猜测数据类型。

免责声明:我从未使用过上述任何工具。ADO 帮了我大忙,自从我为我的框架编写了代码后,我感觉更有控制力(显然保存了 ADO 部分......)。

于 2010-03-18T02:12:33.013 回答
2

Bruce,我使用 Axolot XLSReadWriteII 组件已有 10 年了。这非常好,他们的支持论坛(虽然内容很少)似乎得到了很好的监控。XLSReadWriteII2 版本速度极快,支持各种功能,如图表和图形、命名范围、动态添加公式、单元格格式(包括边框和阴影、合并单元格、垂直和水平对齐、自动调整列宽以及等等)。

我还没有升级到最新版本(我们还在使用XLSReadWriteII2),因为我们仍然可以使用Excel XP格式的文件,而我根本没有使用过XLSMini。不过,我可以对整个产品说非常好的事情;事实上,上周我只是将它用于一些数据库导出的事情。

如果你决定走那条路,我有一堆关于如何做可能有用的不同事情的笔记;如果你想要它们,请给我留言。我还有一个 Delphi 2007 应用程序,它只是展示了如何进行不同的格式化和对齐;实际上,我在 Excel 中复制了一个现有的、相当复杂的报告,其中包含所有格式、边框等,我很乐意让您拥有。

免责声明:我与 Axolot 或其任何员工没有任何关系。我只是一个非常高兴的客户,他在以前的工作中了解到该产品,并且在我开始我现在的工作时印象深刻地购买了它。

于 2010-03-18T13:00:36.063 回答
1

不要打扰 Axolot 的 XLSMini (lite) 版本。我还没有购买其中任何一个,但我在 2008 年初询问了 Excel 2007 支持,Lars 告诉我 XLSMini 是基于 XLSReadWriteII 的,并且两者都将同时更新为 Excel 2007 支持。XLSReadWriteII 自 2008 年 4 月起支持 Excel 2007;XLSMini 仍然没有。

于 2010-03-17T19:28:13.530 回答
1

幸运的是,我已经使用 Axolot 好几年了。支持论坛并没有完全充满信息,但也许是因为它运作良好?

于 2010-03-17T20:42:30.670 回答
1

您可以使用 http://www.connectionstrings.com/excel之类的 ADO 连接字符串, 而不是包含选项(在 ado 连接字符串的第三个选项卡中):

Extended Properties=Excel 8.0;HDR=Yes;IMEX=0  

出于安全考虑,Microsoft 阻止修改(使用 IMEX=1) http://support.microsoft.com/kb/904953/en 示例 SQL(不要忘记括号):

SELECT * FROM [Sheet1$]

你唯一不能做的就是删除: http: //support.microsoft.com/kb/257819/en 所以要删除一行让它为空!您还可以通过 ADO 使用 SQL 导出:

YourADOConnection.Execute('SELECT * INTO aSheet IN "'+ExtractFilePath(ParamStr(0))+'Exported.xls" "Excel 8.0;" FROM YourTable');
于 2012-02-08T20:37:20.900 回答
0

我建议您选择不需要在机器上安装 Excel 的选项。我曾经使用过一个组件,它可以轻松地在一张表中填写一些数据,而无需安装 excel。我还将在 Excel 工作表本身中完成大部分 Excel 工作。并且只需使用组件在工作表上填写一些数据。

我的 2cts。

于 2010-03-18T08:10:31.080 回答