OpenXML库(ClosedXML的替代品)

lla*_*rov 15 .net office-2007 openxml closedxml

有哪些库可以扩展OpenXML(或者为OpenXML添加一种抽象层),类似于ClosedXML?

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

先感谢您.

Chr*_*ris 56

过去一周我一直在评估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");
    }
Run Code Online (Sandbox Code Playgroud)

  • 小更新:似乎从版本3.4.5开始,Spreadsheetlight基于OpenXML 2.5 [`您将需要从Microsoft下载并安装Open XML SDK 2.0 2.5(版本3.4.5以及SDK 2.5)(它是免费提供的) `](http://spreadsheetlight.com/download/) (3认同)
  • 另一个被视为"购物问题"的问题示例还有一组非常有用的答案. (2认同)

Vin*_*Tan 19

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


Ber*_*gin 14

开源:你看过EPPlus吗?

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

许可证:GNU Library通用公共许可证(LGPL).