web-dev-qa-db-ja.com

マルチタブ/シートのCSVは可能ですか?

Webサービスを呼び出していますが、Webサービスからのデータはcsv形式です。 xls/xlsxにデータを保存しようとすると、ワークブックに複数のシートが表示されます。したがって、C#の複数のタブ/シートを使用してcsvにデータを保存するにはどうすればよいですか?.

複数のタブを持つcsvは実用的ではないことを知っていますが、複数のタブ/シートを使用してcsvにデータを保存するためのいまいましい方法やライブラリはありますか?

20
hello temp9

CSVは、ファイル形式として、1つの「表」のデータを想定しています。 Excelの用語では、これはワークブックの1枚です。それは単なるテキストであり、あなたはそれを好きなように解釈することができますが、「標準の」CSV形式はあなたの上司が考えていることをサポートしていません。

あなたはいくつかの方法であなたが望むものをファッジすることができます:

  • 「Book1_Sheet1」、「Book1_Sheet2」などのように、関連するが別個の名前を持つ各シートに異なるファイルを使用します。その後、最初のアンダースコアの前のテキストで関連ファイルのグループを見つけることができます。これは実装が最も簡単ですが、ユーザーは論理的な「ワークブック」ごとに複数のファイルを操作する必要があり、シャッフルでファイルが失われると、そのデータが失われます。

  • 上記を実行し、ファイルを「Zip」して、移動可能な単一のアーカイブにします。上記のオプションの純粋なCSVの利点に加えて、複数のファイルではなく1つのファイルを移動できるという利点がありますが、実際のファイルを取得するためにアーカイブをZip /解凍する必要があるという欠点があります。痛みを緩和するために、.NET 4.5を使用している場合は組み込みのZipFile実装にアクセスでき、そうでない場合はオープンソースのDotNetZipまたはSharpZipLibを使用できます。標準のWindows Zipファイルを使用します。ほぼ普遍的な.tar.gz(別名.tgz)の組み合わせを使用することもできますが、ユーザーは、エクスポートされたCSVのセットからアーカイブを作成するために、プログラムまたは7ZipやWinRARなどのサードパーティの圧縮ツールが必要です。

  • 空白行(改行のみを含む)が「タブ区切り」として機能し、パーサーは新しい構成で列ヘッダーの新しい行とそれに続くデータ行を期待する準CSV形式を実装します。標準のCSVのこのバリアントは、予想されるファイル形式に準拠していないため、CSVの他の消費者には読み込めない可能性があります。スプレッドシートなどの他のアプリケーションで開くことができます。

13
KeithS

Xls/xlsxにデータを保存しようとすると、ワークブックに複数のシートが表示されます。

あなたの答えはあなたの質問にあります、text/csvを使用しないでください(ほとんどの場合、notはできますが、1枚のシートもできません。ただし、ExcelやCalcなどの一部のアプリケーションでは、シートを含む形式にインポートする方法がありますが、xls、xlsx、ods、またはシートを含む別の形式として保存します。

XLSXとODSはどちらもtext/csvよりもはるかに複雑ですが、おそらくそれぞれの形式のセットの中で最も簡単です。

6
Jon Hanna

私はこのライブラリをしばらく使用していますが、

https://github.com/SheetJS/js-xlsx

私のプロジェクトでは、xls(x)、csv、xmlなどの形式からデータと構造をインポートしますが、確実にその形式でも(すべてクライアントから)保存できます!

それがあなたを助けてくれることを願って、オンラインデモを見て、

http://oss.sheetjs.com/js-xlsx/

ソースコードを覗くか、GHに問題を報告しますか?しかし、ほとんどのコーディングは自分で行う必要があると思います

4
Kresimir Pendic

Excelファイルのサイズを小さくしたいと思います。はいの場合、xlsb、つまりExcel Binary Workbook形式として保存することでそれを行うことができます。さらに、すべての空白セルを削除することにより、ファイルサイズを縮小できます。

0
Asim Khan