我需要使用Delphi 2010读取和写入Excel电子表格。没什么好看的。只需在不同的纸张上读取和写入特定单元格和范围的值。无需安装Excel即可正常工作并支持Excel 2007。
我看过的一些事情:
我尝试过使用ADO,它可以在整张纸上选择所有内容,但我没有太多运气阅读特定的细胞或范围。
NativeExcel看起来很有希望,但它似乎没有积极发展,也没有回复电子邮件。
Axolot有两种产品。主要产品似乎非常实用,但价格昂贵。它们有精简版,但它不支持Delphi 2010。
有什么建议吗?免费会很棒,但我愿意接受商业解决方案,只要它可靠且得到很好的支持。
答案 0 :(得分:7)
如果Excel表格是一个相当简单的行/列布局,我对ADO运气很好。
我发现,使用ADO的关键是将Excel工作表视为数据库。如果Excel工作表主要是直行和列布局,则只需将行视为数据库记录,将列视为字段。首先通过搜索特定的列(字段)值(最好是唯一的)来导航到所需的行,然后通过引用作为列名称的字段来读取该行中的所需单元格。
如果你的Excel表格更自由,那就更难了。
答案 1 :(得分:6)
TMS Flexcel - 我知道它看起来像Excel的报告组件(它做得非常好,是一个非常方便的工具包),但它还包括用于读取和显示Excel文件的组件。 Adrian Gallero似乎对Excel API的了解程度,包括Excel 2007,给我留下了非常深刻的印象。
http://www.tmssoftware.com/site/flexcel.asp
当然不是免费的,但是75欧元,我觉得它很有价值。
答案 2 :(得分:3)
不要注销NativeExcel。我已经使用它几年了,效果很好。它速度快,用途广泛。我使用它来生成一个格式精美的多页电子表格,其中包含冻结窗格,单元格中的公式以及来自客户端数据库的数据,供他们用于输入,然后发送给我。当他们从我那里得到第一张电子表格时,我的客户非常激动,因为它极大地减少了他们的工作量,并且使用起来非常直观。
我不知道为什么他们没有回复你,因为我在过去两年里至少更新了他们的包裹几次。当我的许可证到期时,我绝对打算续订。
答案 3 :(得分:3)
迈克一直非常乐于助人,而且反应迅速。
答案 4 :(得分:2)
如果您对excel文件的布局有某种控制权,那么真正有用的是什么。
我已经构建了一个完整的单元和验收测试框架,其中数据和测试控件都包含在Excel电子表格中。
我通过ADO做了所有。您可以将ADO SQL查询限制为整个工作表,命名范围或任何范围。根据我的观点和经验,这种方法非常强大。
有两件事确实给我带来了一些问题: 1.根据您的工作表的命名方式,ADO可能会或可能不会看到它们(再次,如果您可以控制布局,那就太棒了!) 2.在读取数据时要小心ADO返回的数据类型,即它可能将数字显示为字符串。这是因为ADO尝试IIRC根据前几行猜测数据类型。
免责声明:我从未使用过上述任何工具。 ADO为我做了诀窍,自从我为我的框架编写代码后,我感觉更有控制力(显然保存了ADO部分......)。
答案 5 :(得分:2)
Bruce,我已经使用Axolot XLSReadWriteII组件进行了10年。这是非常好的,他们的支持论坛(虽然精简内容)似乎被很好地监控。 XLSReadWriteII2版本速度非常快,支持各种各样的东西,如图表和图形,命名范围,动态添加公式,单元格格式(包括边框和阴影,合并单元格,垂直和水平对齐,自动宽度列大小调整,以及等等。)
我还没有升级到最新版本(我们仍在使用XLSReadWriteII2),因为我们仍然可以使用Excel XP格式文件,而我根本没有使用过XLSMini。不过,我可以说完整产品真的很棒;事实上,我过去一周只是将它用于几个数据库导出。
如果你决定走那条路,我会有很多关于如何做可能有用的事情的笔记;如果你想要它们,请给我留言。我还有一个Delphi 2007应用程序,它只显示了如何进行不同的格式化和对齐;我实际上在Excel中复制了一份现有的,相当复杂的报告,其中包含所有格式,边框等等,我很高兴能够让您拥有这些报告。
免责声明:我与Axolot或其任何员工没有关系。我只是一个非常开心的客户,他在之前的工作中了解到了这个产品,并且在我开始使用它时给我留下了深刻的印象。
答案 6 :(得分:1)
不要为Axolot的XLSMini(lite)版本而烦恼。我还没有购买其中任何一个,但我在2008年初询问了Excel 2007支持,Lars告诉我XLSMini基于XLSReadWriteII,并且两者都将同时使用Excel 2007支持进行更新。自2008年4月以来,XLSReadWriteII已获得Excel 2007支持; XLSMini仍然没有它。
答案 7 :(得分:1)
运气好的话,我已经使用了Axolot多年了。支持论坛并不完全充满消息,但也许这是因为它运作良好?
答案 8 :(得分:1)
您可以使用ADO连接字符串 http://www.connectionstrings.com/excel 包括选项(在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');
答案 9 :(得分:0)
我建议您选择不需要在机器上安装Excel的选项。我曾经使用过一个组件,可以轻松地在一张纸上填写一些数据而无需安装excel。我也会在Excel工作表中完成大部分Excel工作。只需使用组件填写表格中的一些数据。
我的2。