代码之家  ›  专栏  ›  技术社区  ›  rmeador

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

  •  7
  • rmeador  · 技术社区  · 16 年前

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

    理想的解决方案是开放源码的,但到目前为止我还没有见过这样的解决方案。( MyXls XLSSTREAM )似乎能应付挑战。我喜欢 Aspose.Cells ,但它是.NET或Java,而不是C++(并且花钱)。我需要支持从97到现在的所有Excel格式,包括XLSX和XLSB格式。理想情况下,它还支持OpenOffice等格式,以及(用于输出)PDF和HTML。

    我需要支持的一些用例:

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

    如果你能帮我找到一个合适的图书馆,那就太好了。我还想听听关于各种建议(包括我帖子中的建议)的一些证明,这样我就可以做出更明智的决定——什么是易于使用的、无缺陷的、便宜的等等?

    6 回复  |  直到 15 年前
        1
  •  3
  •   user54650    16 年前

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

    http://en.wikipedia.org/wiki/OLE_Automation 大约一半是一个C++例子。

    为了可用性,您可能需要将一些功能包装到函数中,但使用它并不难看。

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

        2
  •  2
  •   Salman A    16 年前

    我不知道这是否是您的一个选项,但是新的Office2007格式是压缩的XML格式,这使得您可以进行自己的修改。见 here for the specifications .

        3
  •  1
  •   Joe Erickson    15 年前

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

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

    电子表格是.NET组件,但您可以构建自己的包装器,它可以从C++调用。

    你可以 see what our customers say 并下载免费的全功能评估 here .

        4
  •  0
  •   Cade Roux    16 年前

    您是否已经尝试使用Excel COM接口?显然,Excel需要安装在机器上,这是一个痛苦的处理…

        5
  •  0
  •   Yes - that Jake.    16 年前

    我认为,用COM互操作来连接到C++应用程序的.NET解决方案是最好的解决方案。在与他们合作的十多年中,我从未见过Excel的COM自动化在某个地方没有泄漏内存。

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

        6
  •  0
  •   rmeador    15 年前

    我最终使用了Aspose.cells,正如我在原始文章中提到的,因为它似乎是最简单的途径。我对结果很满意,他们的支持也很好。我必须在C语言中创建一个包装器,它将COM接口导出到我的C++应用程序。