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

7
我正在寻找一个库,可以编程地修改Excel文件以添加数据到特定单元格。我的当前想法是使用命名区域来确定插入新数据的位置(本质上是1x1的范围),然后更新命名区域以指向数据。将要与此集成的现有应用程序完全是用C++编写的,因此我理想情况下希望找到一个C++解决方案(这就是为什么这个线程的用处有限的原因)。如果所有其他方法都失败了,我将采用.NET解决方案,如果有一种方法可以将其链接到我们的C++应用程序中。
理想的解决方案应该是开源的,但我看到的所有解决方案(MyXlsXLSSTREAM)都不太能胜任。我喜欢Aspose.Cells的外观,但它是针对.NET或Java而不是C++(并且需要付费)。我需要支持从97年到现在的所有Excel格式,包括XLSX和XLSB格式。理想情况下,它还应支持OpenOffice等格式,并且(对于输出)支持PDF和HTML。
我需要支持的一些用例:
读取和修改电子表格中的任何单元格,包括公式
创建、读取、修改命名区域(区域本身,而不仅仅是单元格)
从一个单元格复制格式到其他许多单元格(包括条件格式)--我们将使用一个单元格作为我们填充数据的所有其他单元格的模板。
如果您能帮助我找到合适的库,那就太好了。我也想听听关于各种建议(包括我的帖子中的建议)的见证,这样我就可以做出更明智的决策--哪个易于使用、无错误、便宜等。
6个回答

3
最安全的建议是只使用OLE。它使用COM,根本不需要.NET。 http://en.wikipedia.org/wiki/OLE_Automation <--大约在中间有一个C++示例。
您可能需要将一些功能封装成函数以提高可用性,但实际上使用起来并不难。
编辑:请注意,您需要拥有Excel的副本才能使其工作。此外,您可以找到特定于Excel的一些第一方.h文件。(所有这些都在维基百科文章中有解释)

2
我不知道这对你是否可行,但新的Office 2007格式是压缩的XML格式,这使得自己修改变得非常容易。请参见此处的规范

1

.NET下的SpreadsheetGear可以满足您的需求,并且其API与Excel非常相似。

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

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

您可以查看我们的客户说什么并下载免费的、完全功能的评估版本


0
你尝试过使用Excel COM接口吗?显然需要在计算机上安装Excel,这很麻烦...

0

我认为使用.NET解决方案并进行COM互操作以链接到C++应用程序是最佳解决方案。在与它们一起工作的十多年中,我从未见过Excel的COM自动化没有泄漏内存的情况。

如果您需要自动化Excel,则建议使用Visual Studio Tools for Office。如果您不需要自动化,只需修改文件,并且这些文件可以是Office 2007格式,则最好找到直接操作文件的库,而不是打开Excel来执行操作。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接