OpenXML库(ClosedXML的替代品)

时间:2012-05-08 15:19:03

标签: .net openxml office-2007 closedxml

哪些库扩展OpenXML(或向OpenXML添加一种抽象层),类似于ClosedXML?

我正在寻找至少1.0版本的商业或免费软件。

提前谢谢。

3 个答案:

答案 0 :(得分:48)

我过去一周一直在评估EPPlus,ClosedXML和SpreadsheetLight。这三个都是非常棒的库,可以轻松地处理极其错综复杂的OpenXML。由于以下原因,我决定选择EPPlus:

  • 最初,我打算使用ClosedXML。它有很好的文档,对象结构对我来说很有意义。我有一些图表要求,截至目前,ClosedXML没有任何图表功能。

  • 然后我偶然发现了SpreadsheetLight,它也有很好的文档并支持一些图表。我也喜欢作者的态度和他对产品的承诺。 然而,该项目是建立在OpenXML 2.0 SDK之上,而不是2.5,这对我来说是一个交易破坏者,因为我希望能够灵活地直接使用OpenXML,如果库没有完全符合我的需求。我的项目针对excel 2013,因此我想要使用最新的SDK。 ...更新!有关其他信息,请参阅下面的ErrCode评论......

  • 最后,我遇到了EPPlus,它有正确的文档并支持图表。它被下载的次数远远超过其他两次,这使我在知道其他人正在使用它并且社区似乎在项目周围活跃时具有一定的安全性。他们目前也处于第4版的beta 2,这听起来很有其他人的说法。我也得到了EPPlus表现良好的要点(并非其他人一定都不好),即将推出的第4版似乎也在进一步改进。


更新

我在EPPlus中发现的另一个非常有用的功能是它如何为工作表的各个部分公开XML。如果有一个EPPlus不支持的功能,您仍然可以编辑XML(在某些情况下)以获得所需的输出。例如,如果您有透视图并想要启用多级标签,则可以执行以下操作:

    private void EnableMultiLevelLabels(ExcelChart chart)
    {   
        var element = chart.ChartXml.GetElementsByTagName("c:catAx")[0];
        if (element == null)
            return;

        var multiLevelLabelNode = element.AppendChildElementNode("c:noMultiLvlLbl");
        if (multiLevelLabelNode != null)
            multiLevelLabelNode.AppendNodeAttribute("val", "0");
    }

答案 1 :(得分:17)

SpreadsheetLight,它在Open XML SDK上内部运行。 MIT许可证。 免责声明:我写了SpreadsheetLight。

答案 2 :(得分:14)

开源:你看过EPPlus吗?

口号:在服务器上创建高级Excel 2007/2010电子表格。

许可证:GNU图书馆通用公共许可证(LGPL)。