【问题标题】: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 引用单元格是完全破坏库的一些东西。

标签: .net openxml office-2007 closedxml


【解决方案1】:

开源:你看过EPPlus吗?

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

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

【讨论】:

  • 使用 EPPlus 可以在 power point 文件中生成或写入数据或图表吗?还是仅限于excel?
  • 是的,您可以创建 PowerPoint 文件。我们最终这样做的方式是使用某些模板文件,然后使用 EPPlus 操作它们。
【解决方案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 不同)。
  • 又一个问题示例被视为“购物问题”,但有一组非常有用的答案。
猜你喜欢
  • 2014-01-06
  • 2017-02-17
  • 2019-01-19
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多