Excelのインポートとエクスポート-最適なライブラリは何ですか?[閉まっている]


180

C#のASP.NETアプリケーションの1つで、特定のデータコレクション(SubSonicコレクション)を取得し、それをExcelにエクスポートします。また、Excelファイルを特定の形式でインポートしたいと考えています。この目的に使用できるライブラリを探しています。

要件:

  • Excel 2007ファイル(Excel 2003は64k行以上をサポートしていますか?それ以上必要です。)
  • サーバーにExcelは必要ありません
  • 型付きコレクションを受け取り、可能であれば、数値フィールドをExcelで数値として配置しようとします。
  • 大きなファイル(100k〜10M)で十分に機能します-十分に高速です。
  • GUIDをエクスポートしてもクラッシュしません!
  • 大量のお金はかかりません(asposeのようなエンタープライズライブラリはありません)。無料は常にすばらしいですが、商用ライブラリになることもあります。

どのライブラリをお勧めしますか?大量のデータに使用しましたか?他の解決策はありますか?

現在、後でExcelによって読み込まれるHTMLを生成する単純なツールを使用していますが、一部の機能が失われ、さらにExcelを読み込むと文句が表示されます。グラフなどを生成する必要はありません。生データをエクスポートするだけです。

フラットなCSVファイルを考えていますが、Excelがお客様の要件です。Excelとの間で変換するツールがあれば、CSVを直接操作できます。Excel 2007がxmlベースの(および圧縮された)ファイル形式であることを考えると、この種類のライブラリは簡単に見つけられるはずだと思います。しかし、私にとって最も重要なのはあなたのコメントと意見です。


編集:皮肉なことに、私の意見では、最も投票数の多い回答に従って、最高のExcelインポート/エクスポートライブラリはエクスポートではありません。これはすべてのシナリオに当てはまるわけではありませんが、私の場合です。XLSファイルは64k行のみをサポートします。XLSXは最大1Mをサポートします。私が試した無料のライブラリは、パフォーマンスが悪い(行が200k行ある場合に1行をロードするのに1秒)機能を備えています。有料のものは試していません。高速なXLSX <-> CSV変換ルーチンだけが必要なときに、それらが提供する価値に対して高すぎると感じているからです。


18
「Excel 2007はxmlベースの(および圧縮された)ファイル形式です。この種のライブラリは簡単に見つけられると思います」-はぁ!それは「Excel 97はバイトベースなので、この種のライブラリは簡単に見つけられるはずです」と言っているようなものです。XMLは単純さを意味するものではありません。OOXMLは、XMLを過小評価し、解読不能なほど複雑にする方法の先駆けです。:-)
ケン

実際には、その仮定を完全に正しく行うことはできません。C#.NETで非常に簡単に実行できる、少なくともXLSX向けに整形式のOOXMLドキュメントを作成するためのツールがあります。
匿名タイプ

3
私はこのような質問をStack Overflowから離れた公式の家に与えるためのサイト提案を作成しました。これは、コードの推奨事項と呼ばれ、参加して質問をすることで実現するのに役立ちます。
daviewales 2014年

Spire.xlsについてはどうでしょう。Pro Editionはたったの$ 800です。すべての変換とExcelのインポートまたはエクスポートを取得します。e-iceblue.com/Introduce/...
過去ログプログラマー

GemBox.Spreadsheetは、チェックアウトする価値のある別のソリューションで、超高速で、無料版とプロ版の両方があります。また、プロバージョンはかなり安価であり、ほとんどの場合のように展開のための隠れた安っぽいコストはありません。
NixonUposseen

回答:


41

コードを最大限に制御できる場合に限り、フラットなcsvファイルに手を入れます。行を読み取って一度に1つずつ処理することを確認してください(最後まで文書を読んで分割すると、すべてのメモリが消費されます-書き込みと同じように、ストリームアウトします)。

はい、ユーザーはそれを処理する前に、ExcelでCSVとして保存する必要がありますが、おそらくこの制限は、ページにトレーニングと明確な指示を提供することで克服できるでしょうか?

最後に、顧客にエクスポートするときに、mimeタイプをtext / csvに設定すると、Excelは通常そのタイプにマップされるため、ユーザーには「Excelファイル」のように見えます。


4
CSVアプローチも試しましたが、いくつかの問題があります。たとえば、セルに複数行のテキストが必要な場合はどうでしょうか?ExcelにそのようなCSVをインポートさせることができませんでした。
Igor Brejc

23
CSVはその場所にありますが、ポスターはExcelについて尋ねられました。彼はCSVではなくExcelが必要だと思います。
John Scipione 2010

7
0345のような列をエクスポートすると、CSVが低下します。Excelはこれを自動的に345に切り捨てます。これは、先頭の桁が重要な場合にはまったく役に立ちません。
NotMe

2
Excelのファイル拡張子が付いたHTMLテーブルは非常にうまく機能しているようです...ネイティブのExcelファイルを実際に作成する必要なく、複数の行や色などの書式設定などの特殊な方法でCSSを解析します
Oskar Duveborn

3
「名前を付けて保存」?いいえ。顧客がExcelを使用している場合、製品とやり取りするために、2番目のはるかに制限されたファイルを保存する必要があるのはなぜですか。
mlibby

41

私は最初の回答以来、Open XML SDKを発見しました。特に、スプレッドシートオブジェクト用の強く型付けされたクラスを提供し、操作がかなり簡単なようです。私のプロジェクトの1つでレポートに使用します。残念ながら、バージョン2.0は2009年後半または2010年までリリースされる予定ではありません。


とても興味深い!大量のデータを使用してテストしましたか?
Jason Kealey、2009

パフォーマンステストは行っていません。私は主にグラフと単一ページのレポートを作成するので、スループットは問題ではありません。ただし、マネージコードと同じくらい高速です。
cdonner 2009

1
@Jason Kealey:これは本当にこの投稿の最良の答えです-エクスポートはSpreadsheetMLとは無関係になります。データはすべてファイル内からアクセスできます。別の形式のデータが必要な場合は、XSLTまたはLinqを介して変換を提供します。
トッドメイン

1
ただし、これは「.xls」ファイルではまったく機能しません。
キルブレーカー、2012年

github.com/OfficeDev/Open-XML-SDKがオープンソースになり、github-hostedになりました(MSが最近向かっているところが好きです)
Alex

34

ExcelPackageの新しいバージョンはこちら http://EPPlus.codeplex.com

私のアプリケーションは一部のデータをExcelテンプレート2007にエクスポートする必要があるため、Excelへのエクスポート機能とまだ闘っています

このプロジェクトは私には問題ないと思われ、開発者はバグや問題に非常に敏感です。


3
正常に動作しますが、GPLでライセンスされています。たとえば、GPLを使用するすべてのソフトウェアがプレーンソースコードでも利用できる必要があります。...必ずしも適切な選択とは限りません...
marc_s

あなたにとって便利なネイティブ形式でエクスポートし、PROGを書きます。EPPlusを使用してExcelに変換し、それを無料にします。メインプログラムがデフォルトでそれを使用するようにしますが、他の「プラグイン」を許可します。実際のコードはGPLから解放されています。

5
これはLGPLの下でライセンスされているようですので、コピーレフトの制限なしにリンクライブラリとして使用しても問題ありません。
Brad R

大きな文字列が含まれるExcelファイルを作成する必要がある場合、このライブラリはExcelで「読み取り不可能なコンテンツ」エラーをランダムに生成する傾向があることに注意してください。
Kevin Laity、2014年

1
EPPlusはメモリリークを起こしますが、大量のデータにはあまり適していません。
user3285954

18

私はClosedXMLを使用してきましたが、うまくいきます。

ClosedXMLを使用すると、開発者はExcel 2007/2010ファイルを簡単に作成できます。XMLドキュメントの煩わしさを処理せずに、ファイルを操作する(VBAと同様の)優れたオブジェクト指向の方法を提供します。C#やVisual Basic(VB)などの.NET言語で使用できます。


8
名前の皮肉が大好きです...
ヤークト

同じようにそれを使用し、同じ経験。うまく機能し、非常に柔軟です。
AnthonyVO

14

SpreadsheetGear for .NETは、CSV / XLS / XLSXの読み取りと書き込みなどを行います。

ここで、C#およびVBのソースコードを含むASP.NETのライブサンプルを確認し、ここから無料の試用版をダウンロードできます

もちろん、SpreadsheetGearはASP.NETでExcelワークブックをインポート/エクスポートするのに最適なライブラリだと思いますが、私は偏っています。このページの右側で、お客様の声をご覧いただけます

免責事項:私はSpreadsheetGear LLCを所有しています


@Joe Erickson:CSVを読み取って、スプレッドシートギアを使用して読み取ったCSVからXMLを生成し、そのXLSを使用して、その構造を含む結果のXMLファイルを生成する方法について教えてください。または、Spreadsheetgearを使用してCSVから直接XMLを生成できますか?
AnkitSablok


5

私は過去にFlexcelを使用したことがあり、それは素晴らしかったです。しかし、これはプログラムでExcelワークシートを作成および更新するためのものでした。


これがExcel 2007(xlsx)をサポートしていることはわかりません。xlsは64k行のみをサポートするため、これは私にとっての制限です。
Jason Kealey、2009年

@Jason Kealey - FLEXCELは今エクセル2007と2010をサポートん
Pauk

5

CSVエクスポートはシンプルで、実装が簡単で、高速です。ただし、注目に値する潜在的な問題が1つあります。Excel(2007年まで)では、CSVファイルの先行ゼロは保持されません。これにより、ZIPコード、製品ID、および数値を含むその他のテキストデータが文字化けします。Excelに値を正しくインポートさせるトリックが1つあります(たとえば、..、= "02052"、...のように、覚えている場合は、=記号で区切り記号と接頭辞の値を使用します)。CSVを使用して後処理タスクを実行するユーザーがいる場合、ユーザーは形式をXLSに変更し、ファイルをCSVに保存しないでください。そうした場合、先行ゼロは永久に失われます。


1
テキストとして保存する必要があるものについては、最初に '(アポストロフィ)を付けます
phuclv

もう1つの面白い事実:ドイツ語など、多くのロケールでコンマ区切りファイルを開くことができません。そのため、CSVは国際的な連絡先とデータを共有するのに不適切な形式になります
Christian Sauer 14

4

長年、私はこれにJExcelを使用してました。これは優れたオープンソースJavaプロジェクトです。また、J#を使用してコンパイルすることで.NET対応になりました。また、このインカネーションでは、これで大きな成功を収めました。ただし、最近、Excel出力を作成する64ビットIISアプリケーションをサポートするために、コードをネイティブ.NETに移行する必要がありました。32ビットJ#バージョンはロードされません。

CSharpJExcelのコードはLGPLであり、現在このページから入手できますが、JExcel SourceForgeサイトにデプロイする準備をしています。VS2005またはVS2008でコンパイルされます。元のJExcelドキュメントの例はそのまま.NETバージョンに移行します。

それがここの誰かに役立つことを願っています。


どちらのリンクも機能しなくなりました...しかし、そのスニペットをいくつか見つけました。それは、.NET開発者にとってはそれほどJavaフレンドリーではないようです。しかし、私は反対の別のライブラリを見つけました。それはネイティブ.NETライブラリ(GemBox.Spreadsheet)であり、これもJavaに移植されました(GemBox.Spreadsheet for Java)。
Hazel Patton、


3

次のサイトは、DataTable、DataSet、またはList <>を「適切な」Excel 2007 .xlsxファイルにエクスポートする方法を示しています(.csvファイルをエクスポートしてExcelで開くのではなく)。

OpenXMLライブラリを使用するため、サーバーにExcelをインストールする必要ありません

Mikesナレッジベース-ExportToExcel

すべてのソースコードが無料で提供され、デモアプリケーションも提供されます。

独自のアプリケーションに追加するのは非常に簡単です。1つの関数を呼び出し、Excelファイル名とデータソースを渡すだけです。

DataSet ds = CreateSampleData();
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);

お役に立てれば。


2

ExcelPackageプロジェクトを確認してください。Excel2007のOffice Open XMLファイル形式を使用しています。軽量でオープンソースです...


1
美味しそうでしたが、1つのコメントは、それが大きなファイル(私のシナリオ)を悪いと言う
ジェイソンKealey

1
興味深い-LGPLではなく、GPLとしてライセンスされています。したがって、GPLアプリケーションで使用する必要があります。(また、残念なことに、開発が停止したようです。)
Jason Kealey 2009年

1
ExcelPackageを試しましたが、それを放棄する必要がありました-セルに単一引用符( ')を入れようとすると失敗します。
Igor Brejc

2

私はCSharpJExcelを試してみましたが、少なくともいくつかのドキュメントが利用可能になるまではお勧めしません。開発者のコ​​メントに反して、これはまっすぐなネイティブポートではありません


2

私は、これはかなり遅れているけど、私は答えることを強制感じるxPorter(書き込み)とxlReaderから(読み込み)をxPortTools.Net。かなりの数のライブラリーをテストしましたが、パフォーマンスの点で近づくものは何もありません(ここでは数百万行を数秒で書き込むことについて話しています)。これらの製品について十分な良いことを言うことはできません!


2

使用できます Microsoft.Jet.OLEDB.4.0


1
私の要件の1つは、サーバーでExcelを実行しないことです。
Jason Kealey、2009年

2
思わないので走っている!!
SonerGönül2010

2
"Microsoft.Jet.OLEDB.4.0"(for xls) "Microsoft.ACE.OLEDB.12.0 for xlsx"の場合、MS Officeは必要ありません。ドライバーのみを使用する必要があるため、サーバー@Jason KealeyでExcelを実行する機会はありません
Sanjay Goswami

1
私はこれをXLS(元の要件ではなく)と完全性のために使用しました...重要な問題がいくつかあります:(1)これは32ビットのみなので、それを許可するようにIISを設定する必要があります。(2)エクスポートが非常に遅い。(3)行と列の制限が十分に文書化されていない。(4)レジストリへのアクセス権がない限り、インポートされた列の「タイプスニッフィング」を主張し、通常はそれを誤解します。
philw '19

1

同様のニーズを特定しました。そして、私はユーザーエクスペリエンスを考慮することが重要だと思います。

私たちはほぼ同じように迂回しました:

  1. スプレッドシートファイルで準備/作業
  2. ファイルを保存
  3. インポートファイル
  4. システム内のデータを操作する

...ワークフロー

アドインエクスプレスを使用すると、VSTOで面倒な作業をしなくても、Excel内にボタンを作成できます。次に、ワークフローは次のようになります。

  1. スプレッドシートファイルで準備/作業
  2. ファイルのインポート(Excel内のボタンを使用)
  3. システム内のデータを操作する

ボタンの背後にあるコードで(ネイティブの)Excel API(アドインエクスプレス経由)を使用し、受信者のシステムに直接プッシュします。開発者やユーザーにとって、これ以上透過的にすることはできません。検討する価値があります。


1

Yogesh JagotaによるCodeProjectに関するかなり良い記事とライブラリがあります:

Excel XMLインポート/エクスポートライブラリ

SQLクエリやその他のデータソースからExcelにデータをエクスポートするために使用しました-私には問題なく動作します。

乾杯


1
興味深いですが、XMLファイルが必要です。xlsまたはxlsxファイルを読み書きできません。
Jason Kealey、2009年

1

次のライブラリを試すことができます。これは十分に簡単で、MicrosoftのOpen XML SDKの単なるラッパーです(フォーマット、スタイル、さらにはセカンダリExcelファイルのワークシート全体を再利用することもできます):http : //officehelper.codeplex.com


ライブラリの新しいリリースが最近公開されました。
aron.sinoai 2012年

0

Spreadsheetgearは、私たちが見つけて使用している最高の商用ライブラリです。当社は多くの高度なExcelのインポートとエクスポートを行っており、Spreadsheetgearは多くの高度なExcel機能をサポートしており、シンプルなCSVでできることをはるかに超えており、高速です。無料でも安くもありませんが、サポートが優れているので価値があります。問題が発生した場合、開発者は実際に対応します。


0

Apache POI Javaライブラリについてはどうでしょう。Excelには使用していませんが、Word 2007には使用しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.