使用OpenXML时,EPPlus和ClosedXML库有什么区别?

27

我正在尝试在ClosedXML、EPPlus和可能的SpreadsheetLight之间进行选择。 有哪些原因可以考虑选择其中一个而不是其他呢?


4
我知道这是个老问题,但你是否有特别的原因不喜欢ClosedXML?是因为它需要一个主版本号这样的政策问题,还是你觉得ClosedXML不够稳定? - jamiebarrow
我对ClosedXML的问题在于它在许多情况下都无法正常工作。引用具有数组公式、表格公式、SUMIF等功能的单元格是完全破坏该库的一些方面。 - Vedran
3个回答

66

在过去的一周里,我一直在评估EPPlus、ClosedXML和SpreadsheetLight。这三个库都非常棒,可以让使用极其混乱的OpenXML变得轻松。我决定选择EPPlus,原因如下:

  • 最初,我想选择ClosedXML。它有很好的文档,并且对象结构对我来说很有意义。不过我有一些图表要求,而目前ClosedXML没有任何图表功能。

  • 然后我发现了SpreadsheetLight,它也有良好的文档并支持一些图表功能。我也喜欢作者的态度和他对产品的承诺。不过,该项目是建立在OpenXML 2.0 SDK而非2.5之上,这对我来说是个硬伤,因为如果库不能完全满足我的需求,我希望有灵活性直接使用OpenXML。我的项目针对excel 2013,所以我希望使用最新的SDK。

  • 最后,我发现了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
我同意。非常好的答案!我想使用ClosedXML的对象模型,但这个答案完全改变了我的想法。我在想EPPlus是否可以以某种方式采用ClosedXML的对象模型?你有什么想法? - John Zabroski
感谢@JohnZabroski,很高兴能帮忙!我同意您关于对象结构的看法;我认为他们可以进一步抽象出一些更复杂的OpenXML部分。另一方面,我认为他们也在努力找到使用其库和OpenXML并行工作之间的灵活性的正确平衡,这对我来说也是有道理的。我希望随着他们承担更多功能,我们将开始看到一些这些改进。 - Chris
1
在我看来,EPPLUS 的另一个“优点”是它的 NuGet 包没有任何依赖关系,甚至不需要 DocumentFormat.OpenXml(与 ClosedXML 不同)。 - Frank Fajardo
4
小更新:看起来自版本3.4.5以来,Spreadsheetlight基于OpenXML 2.5 您需要从微软下载并安装Open XML SDK 2.0 2.5(版本3.4.5及以上的版本与SDK 2.5兼容),该软件可免费获取 - ErrCode
9
又一个被认为是“购物问题”的例子,然而却有一组非常有用的答案。 - b_levitt

25

SpreadsheetLight是一个基于Open XML SDK内部运行的电子表格处理程序。采用MIT许可证。 免责声明:我编写了SpreadsheetLight。


2
不错的库!我在想它的性能如何。与ClosedXML、EPPlus或其他商业库(GameBox.Spreadsheet或SpreadsheetGear 2010)相比,它的表现如何?我知道SpreadsheetLight是一个免费的库,但我想知道它的速度 :) - Misiu

15

开源:您看过EPPlus吗?

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

许可证:GNU Library General Public License (LGPL)。Polyform Noncommercial License 1.0.0


使用EPPlus,我们可以在PowerPoint文件中生成或编写数据或图表吗?还是它只限于Excel? - Mou
1
是的,您可以创建PowerPoint文件。我们最终采用的方法是使用特定的模板文件,然后使用EPPlus进行操作。 - user1630889
1
许可证已修改为 https://github.com/EPPlusSoftware/EPPlus/blob/develop/license.md - Raghavendra

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