2012-05-08 73 views
10

ClosedXMLと同様に、OpenXMLを拡張する(または、OpenXMLに一種の抽象化レイヤを追加する)ライブラリはありますか?OpenXMLライブラリ(ClosedXMLの代替)

私は少なくとも1.0バージョンの商用またはフリーウェアのツールを探しています。

ありがとうございます。

+3

私はこれが古い質問ですけど、あなたがいなかった理由を具体的にどんな理由がありますClosedXMLに満足?メジャーバージョン番号が必要な政治的なものか、ClosedXMLが十分に安定していないと感じましたか? – jamiebarrow

+0

ClosedXMLの問題は、多くの場合正しく機能しないことです。配列式、テーブル式、SUMIFでセルを参照することは、ライブラリを完全に分解するいくつかの事柄です。 – Vedran

答えて

14

オープンソース:EPPlusを見ましたか?

スローガン:サーバー上に高度なExcel 2007/2010スプレッドシートを作成します。

ライセンス:GNUライブラリ一般公衆利用(LGPL)。

+0

EPPlusを使用すると、データを生成したり、パワーポイントファイルにチャートを書き込んだりできますか?それともエクセルのみに限定されていますか? – Mou

+1

はい、PowerPointファイルを作成できます。私たちのやり方は、特定のテンプレートファイルを使用してから、EPPlusを使用してそれらを操作することでした。 –

16

SpreadsheetLightであり、Open XML SDKで内部的に実行されます。 MITライセンス。 免責事項:私はSpreadsheetLightを書きました。

+1

素敵な図書館!私はパフォーマンスについて疑問に思います。 ClosedXML、EPPlusまたは他のライブラリ(商用)GameBox.SpreadsheetまたはSpreadsheetGear 2010と比較してどのように見えますか?私はSpreadsheetLightが無料のライブラリだと知っていますが、スピードを知りたいと思っています:) – Misiu

41

私は先週、EPPlus、ClosedXML、およびSpreadsheetLightを評価しました。この3つはすべて、非常に畳み込まれたOpenXMLを手軽に扱う素晴らしいライブラリです。私は、次のような理由からEPPlusで行くことに決めました:

  • は当初、私はClosedXMLで行くつもりでした。それは素晴らしいドキュメンテーションを持っていて、オブジェクトの構造は私には非常に意味がありました。私はいくつかのチャート要件を持っていますが、現在のところ、ClosedXMLにはチャート機能はありません。

  • 私はSpreadsheetLightを見つけましたが、これも良いドキュメントがあり、いくつかのチャートをサポートしています。私はまた、著者の態度と彼の製品へのコミットメントが好きです。しかし、このプロジェクトはOpenXML 2.0 SDK(2.5ではなく)の上に構築されています。これは、ライブラリが自分のニーズを十分に満たしていない場合にOpenXMLで直接作業する柔軟性を持たせたいからです。私のプロジェクトは2013年を目標としているので、最新のSDKを使いたいと思っています。

  • 最後に、私は大丈夫なドキュメントとチャーティングをサポートするEPPlusに出会った。それは他の2つよりもはるかに多くダウンロードされているので、他の人がそれを使用していることを知っていて、コミュニティがプロジェクトの周りで活動しているように見えます。彼らは現在、他の人が約束していると思われるバージョン4のベータ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

そのような素敵な答え! – nawfal

+0

@nawfal:ありがとう! – Chris

+0

私は同意します。素晴らしい答え!私は、オブジェクトモデルのためにClosedXMLを使いたいと思っていましたが、この答えが私を完全に揺さぶっていました。 EPPlusが何らかの形でClosedXMLのオブジェクトモデルを採用できるかどうか疑問に思っていますか?あなたの考えは? –