同じファイルがExcelファイルよりもテキストファイルで多くのスペースを必要とするのはなぜですか?


59

約100000行のデータがあります。このデータをテキストファイル形式で保存すると、Excelファイル形式で保存する場合よりも多くのスペースが必要になります。何故ですか?

回答:


117

xlsxフォーマット現代のExcelで使用さは、実際には圧縮形式です。これは、特定の構造のテキスト(XML)ファイルを含むZIPアーカイブです。

同様のZIP圧縮ツールでプレーンテキストファイルを圧縮する場合、同様のファイルサイズを実現する必要があります。

さらに、Bradley UffnerMorgenがコメントで述べたように、Excelは同一の文字列を重複排除し、それらのコピーを1つだけ保存します。そのような方法の正確な利点についてはわかりませんが、それはあなたのデータセットに依存しますが、単純なzip圧縮はおそらくあなたにその方法のほとんどをもたらすでしょう。1


9.1.3物理パッケージ

各Office Open XMLドキュメントは、ZIPアーカイブとして実装されます。

ECMA-376-1:2016


1私の推測では、zip圧縮はアーカイブ内の各ファイルに個別に適用され、データの限られたセクションに対してのみ-単一のファイルにすべての文字列を一緒に保存するため、複数のワークシートがある場合にこの重複排除が最も効果的だと思います後の圧縮の利点になるはずです。より現実的には、プレーンテキスト形式が単一のファイルに含まれている場合、おそらくほとんど違いはありません。


2
これは素晴らしい!Excelファイルの処理方法に関する非常に優れた洞察を提供します。ありがとう!
ドミニク

3
@Dominique詳細を知りたい場合は、解凍して(たとえば、7zipで、またはで終わるように名前を変更して.zip)試してみてください。仕様も利用できますが、かなり読みにくいです。
ボブ

3
また、Excelは文字列辞書も使用していると思います。文字列辞書では、セル間で同一のテキストを一度だけ保存しながら再利用できます。
ブラッドリーアフナー

1
Apache ooxmlライブラリによって公開されるAPIに基づいて、共有文字列辞書は少なくとも可能性があります。
モルゲン

2
共有文字列は、OLEコンテナ内のBIFFと呼ばれるレコード指向の形式であるXLS(xなし)ファイルを記述したときでも、Excelの機能でした。古いXLS仕様とXLSXを比較すると、XLSXはBIFFの圧縮されたzip形式の圧縮バージョンであることがわかります。そのため、基本的にMSは、XLSXの共有文字列機能を発明しませんでした。XLSXは、圧縮のためにあまり意味がありません。彼らはXLSをXLSXに変える最も簡単な方法を行っただけです。
ブローム

2

与えられた答えは正しいです。Excelがデータをxmlとして保存しているためです。また、これは、データを効率的に並べ替えることでファイルサイズが小さくなることも原因です。自分でテストします-次のようなデータがあると言います

A            B                              C
John         Smith-Johnson-Williamson       12345
Sally        Smith-Johnson-Williamson       67890
John         Williams                       34567

C(すべてまたはほとんどすべての一意の値を持つ列)のみでソートする場合、Bの同一の値は隣接しません。Excelのxmlでは、次のようになります。

<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>

B(共通の値を持つ列)でソートすると、同じ値が隣接します。Excelのxmlでは、次のようになります。

<Smith-Johnson-Williamson><John><12345>
  <Sally><67890>
<Williams><John><34567>

その長い文字列は同一で隣接しているため、Excelはリストを作成する場合と同様に、それらを一緒にパックできることを認識し、上記の行の一部を繰り返すために、同じものを書き直すのではなく引用符を入力します。私は調査で共有文字列辞書の証拠を見つけませんでした-繰り返しフィールド値の代わりにこのインデントだけ。

私は11州のみで250,000人の顧客のメーリングリストを作成し、各レコードには、提供するオファーを識別する2つの文字列の1つであるフィールドがありました。私たちの従業員は、何らかの理由で、話されている通りの住所で人々を調べることに慣れていたため、最初に申し出を行い、次に州、郵便番号、都市、通りの名前、通りの番号、そして最後に住所行2、ファイルサイズは信じられないほど減少しました。各方法でソートされたファイルの展開されたxmlを調べて、何が起こっているかを確認しました。上記は私が推測したものです。たとえば5文字以上のフィールドが複数あるが、値が制限されている場合(たとえば、「解決済み」、「拒否済み」、「承認済み」などのチケットの性質)、


CompanionCubeこんにちは、これは非常に素晴らしい知識です。!!! どうもありがとうございます。
user734178

-5

3.14159265359のような番号がある場合、これをテキストファイルに保存するには13バイトが必要です。この数値をfloatとして保存する場合、必要なのは4バイトだけです。


19
これはxls(BIFF)に当てはまるかもしれませんが、私はそうは思わxlsxない。xlsxすべてのデータをXMLファイルに保存します。XMLファイルは、数字のバイナリエンコードを実行しません-変換されてテキスト文字列として保存されます。私はまだ仕様の関連セクションを探していますが、私の実証テスト(保存されたドキュメントの抽出)は、1.123文字通りXMLに5文字の文字列として保存されていることを示しています。
ボブ

14
ECMA-376-1:2016§18.3.1.4 c(セル)vECMA-376-1:2016§18.3.1.96 v(セル値)で定義されているように、セルがタグにデータを格納することを示しています。 ST_Xstring単純型(§22.9.2.19)によって定義されます。<v>28086.3541666667</v>データが文字列として明確に保存されている場所などの例を提供します。
ボブ

4
@gerrit 残念ながら、 Excel プログラム内で数値を浮動小数点として解釈し、電話番号が最後の数桁を落とすなどの興味深い問題を引き起こします。ただ、フロートとしてディスクに保存しません(もう?)。
ボブ

2
@Bobもこれに該当します。これはxlsb、巨大なシートに強くお勧めします
-phuclv

2
この答えがなぜそれほど多くのダウン票を獲得するのか分かりません。OPはどのExcel形式を指定しなかったので、技術的にはこれも有効な回答です
-phuclv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.