我试图在 ClosedXML、EPPlus 和可能的 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");
}
SpreadsheetLight,它在 Open XML SDK 内部运行。麻省理工学院许可证。免责声明:我写了 SpreadsheetLight。