2017-08-03 3 views
0

タイトルには、C#で大量のDataTableがあり、できるだけ早くExcelにエクスポートする必要がありますが、妥当なメモリ消費量を必要とします。C#でDataTableをMS Excelにエクスポートする最も速い方法は何ですか?

私は、以下のものを使用して試してみた:

  1. EPPlus(現在は最速)
  2. OpenXMLEPPlusより遅く - EPPlusはおそらくOpenXMLを使用すると、これは理にかなっているかわからない?)
  3. SpreadsheetLightを(ゆっくり)
  4. ClosedXML(大規模なテーブルを使用したOOM例外)

膨大なデータセット(最大1,000,000行、50列)と無限の開発時間を想定すると、私がエクスポートできる最も速い方法は何ですか?

EDIT:A1から始まる基本的なテーブル以上のものが必要です。自分の選択したセルでテーブルを開始する必要があります。データを含むセルをフォーマットし、複数のタブにそれぞれ独自のデータセットが含まれている必要があります。

ありがとうございました。

+0

[回答はこちら](https://stackoverflow.com/questions/32690851/export-big-amount-of-data-from-xlsx-outofmemoryexception/32787219#32787219)のコードをご覧ください。 SAXアプローチを使用してOpenXmlを使用する方法を示しています。これは最速の方法です。大規模なデータセットではメモリ効率が向上します。 – petelids

+0

*大量のデータセットを想定すると(最大1,000,000行、50列)* Excelは仕事に間違ったツールです...私はEPPlusを推奨しています。これはすでに試してみたところ「最速」ですが、現在より速い「私はベンチマークしました」よりも「より速い者」以外のパフォーマンス要件を記述する –

答えて

0

Excelは単なるXMLファイル形式です。すべてのヘルパーライブラリを取り除き、EPPPlusやOpenXMLの人よりもコーディングの方が優れていると思うなら、XMLストリームライタを使用して、正しくタグ付けされたExcel XMLをファイルに書き込むことができます。

すべての種類の標準的なファイルのバッファリングとキャッシングを使用して、できるだけ早く書き込みを行うことができますが、Excelファイルに特有のものではありません。

0

Excelファイルでのデータの表示方法に関する要件はありませんでした。私は、正しい列に正しいデータを設定するだけで、複雑なロジックは必要ないと思う。その場合、データをCSV(カンマ区切りの値)ファイルに入れることができます。 Excelはこのファイルをうまく読み込めます。

CSVファイルの例:

Column 1,Column 2,Column 3 
value1,value1,value1 
value2,value2,value2 
... 

に要求されるように、ここで作成csvファイルのコードサンプルです。

var csvFile = new StringBuilder(); 
csvFile.AppendLine("Column 1,Column 2,Column 3"); 

foreach (var row in data) 
{ 
    csvFile.AppendLine($"{row.Column1Value},{row.Column2Value}, row.Column3Value}"); 
} 

File.WriteAllText(filePath, csvFile.ToString()); 

あなたはCSVファイルを解析するためのいくつかのtexternalライブラリを使用することができますが、これは私が気圧の考えることができる最も基本的な方法です。

+0

私が達成する必要のあるものについての詳細を編集しました。返信のおかげで – IDoCode

0

無限の開発時間と仮定すると、私がエクスポートできる最も速い方法は何ですか?

独自のXLSXエクスポートを手書きします。これは基本的に圧縮されたXMLです。したがって、XMLをZipArchiveにストリーミングすると、できるだけ早く多かれ少なかれ進んでいきます。それをバッファリングするのではなくストリーミングする場合は、サイズのエクスポートに対してメモリ使用量を修正する必要があります。

関連する問題