以编程方式修改Excel电子表格的最佳方法

时间:2009-01-13 16:08:49

标签: c++ excel

我正在寻找一个允许我以编程方式修改Excel文件以将数据添加到某些单元格的库。我目前的想法是使用命名范围来确定插入新数据的位置(基本上是1x1的范围),然后更新命名范围以指向数据。它要集成的现有应用程序完全用C ++编写,所以我理想地寻找C ++解决方案(因此this thread的用途有限)。如果所有其他方法都失败了,如果有某种方式将它与我们的C ++应用程序相链接,我将使用.NET解决方案。

一个理想的解决方案是开源的,但到目前为止我所看到的(MyXlsXLSSTREAM)似乎都没有达到挑战。我喜欢Aspose.Cells的外观,但它适用于.NET或Java,而不是C ++(并且需要花钱)。我需要支持从97到现在的所有Excel格式,包括XLSX和XLSB格式。理想情况下,它还支持OpenOffice和(输出)PDF和HTML等格式。

我需要支持的一些用例:

  • 读取和修改电子表格中的任何单元格,包括公式
  • 创建,阅读,修改命名范围(范围本身,而不仅仅是单元格)
  • 将格式从单元格复制到其他一些单元格(包括条件格式) - 我们将使用一个单元格作为模板,用于我们用数据填充的所有其他单元格。

任何可以帮助我找到合适的图书馆的帮助都会很棒。我还想听听一些有关各种建议的推荐(包括我发帖中的建议),这样我就可以做出更明智的决定 - 什么方便使用,无错误,价格便宜等?

6 个答案:

答案 0 :(得分:3)

最安全的建议是使用OLE。它使用COM,它根本不需要.NET。

http://en.wikipedia.org/wiki/OLE_Automation< - 大约一半是C ++示例。

您可能需要将一些功能包含在可用性功能中,但使用它并不是很难看。

编辑:请注意,您需要Excel副本才能使用。此外,还有一些您可以找到特定于Excel的第一方.h文件。 (这些都在维基百科的文章中解释过)

答案 1 :(得分:2)

我不知道这是否适合您,但新的Office 2007格式采用压缩XML格式,这使得您可以自行修改。请参阅here for the specifications

答案 2 :(得分:1)

SpreadsheetGear for .NET将处理您的要求,并且具有与Excel非常相似的API。

插入单元格时,您自定义的名称(以及任何其他公式/图表等等)将自动修复以引用新范围(就像在Excel中一样)。因此,您不需要更新已定义的名称(尽管如果您想要这样做,则完全支持创建和更新已定义的名称。)

SpreadsheetGear是一个.NET组件,但您可以构建自己的包装器,可以从C ++中调用。

您可以see what our customers say下载免费的,功能齐全的评估here

答案 3 :(得分:0)

您是否已尝试使用Excel COM界面?显然Excel需要安装在机器上,处理......很痛苦。

答案 4 :(得分:0)

我认为使用COM interop连接到C ++应用程序的.net解决方案是最佳解决方案。在与他们合作的十多年中,我从未见过Excel的COM自动化,它没有泄漏内存。

如果您需要自动化Excel,我建议Visual Studio Tools for Office。如果您不需要自动化,只修改文件,那些文件可以是Office 2007格式,您最好找一个直接操作文件的库,而不是打开Excel来执行它。

答案 5 :(得分:0)

我最后使用了Aspose.Cells,正如我在原帖中提到的那样,因为它似乎是最简单的路径。我对它的结果非常满意,他们的支持非常好。我不得不在C#中创建一个包装器,它将COM接口导出到我的C ++应用程序。