EPPlus 和 ClosedXML 库在处理 OpenXML 方面有啥区别? [关闭]

Posted

技术标签:

【中文标题】EPPlus 和 ClosedXML 库在处理 OpenXML 方面有啥区别? [关闭]【英文标题】:What are the differences between the EPPlus and ClosedXML libraries for working with OpenXML? [closed]EPPlus 和 ClosedXML 库在处理 OpenXML 方面有什么区别? [关闭] 【发布时间】:2012-05-17 02:36:41 【问题描述】:

我正在尝试在 ClosedXML、EPPlus 和可能的 SpreadsheetLight 之间进行选择。我可能会考虑哪些原因来选择其中一个?

【问题讨论】:

我知道这是一个老问题,但是有什么特别的原因让您对 ClosedXML 不满意吗?需要一个主要版本号,这更像是一个政治问题,还是您觉得 ClosedXML 不够稳定? 我对 ClosedXML 的问题是它在很多情况下都不起作用。使用数组公式、表格公式、SUMIF 引用单元格是完全破坏库的一些东西。 【参考方案1】:

开源:你看过EPPlus吗?

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

许可证:GNU 库通用公共许可证 (LGPL)。Polyform 非商业许可证 1.0.0

【讨论】:

使用 EPPlus 可以在 power point 文件中生成或写入数据或图表吗?还是仅限于excel? 是的,您可以创建 PowerPoint 文件。我们最终这样做的方式是使用某些模板文件,然后使用 EPPlus 操作它们。 许可证修改为github.com/EPPlusSoftware/EPPlus/blob/develop/license.md【参考方案2】:

SpreadsheetLight,它在 Open XML SDK 内部运行。麻省理工学院许可证。 免责声明:我编写了 SpreadsheetLight。

【讨论】:

不错的图书馆!我想知道性能。与 ClosedXML、EPPlus 或其他库(商业)GameBox.Spreadsheet 或 SpreadsheetGear 2010 相比,它看起来如何?我知道 SpreadsheetLight 是免费库,但想知道它的速度 :)【参考方案3】:

过去一周我一直在评估 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");
    

【讨论】:

我同意。精彩的答案!由于对象模型,我想使用 ClosedXML,但这个答案完全动摇了我。我想知道 EPPlus 是否可以以某种方式采用 ClosedXML 的对象模型?你有什么想法? 谢谢@JohnZabroski,很高兴我能帮上忙!我同意你对对象结构的看法;我认为他们可以通过抽象出 OpenXML 的一些更复杂的部分来更进一步。另一方面,我认为他们也在尝试在使用他们的库和并行使用 OpenXML 之间找到适当的灵活性平衡,这对我来说也很有意义。我希望随着时间的推移,随着它们具有更多功能,我们将开始看到其中的一些改进。 在我看来,EPPLUS 的另一个“优势”是它的 nuget 包没有依赖项,甚至没有 DocumentFormat.OpenXml(与 ClosedXML 不同)。 小更新:好像从 3.4.5 版本开始,Spreadsheetlight 是基于 OpenXML 2.5 You will need to download and install the Open XML SDK 2.0 2.5 (version 3.4.5 onwards work with SDK 2.5) from Microsoft (it’s freely available) 又一个问题示例被视为“购物问题”,但有一组非常有用的答案。

以上是关于EPPlus 和 ClosedXML 库在处理 OpenXML 方面有啥区别? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C# Excel常用控件总结

任何用于处理 Excel(*.xls 和 *.xlsx)文件的开源/免费库? [复制]

使用ClosedXML,读取到空行

excel的当前格式在 Closedxml SaveAs 方法中发生变化

使用 closedxml 从 web api 下载 excel 文件

csharp [cmをinchに変换] ClosedXMLで余白などの指定をするときはインチ指定しなければならない。#ClosedXML #ExtensionMethod