web-dev-qa-db-ja.com

Excelファイルが巨大になります(> 150 MB)

私の会社の多くの従業員が使用している特定のExcelファイルが1つあります。 Excel 2003と2007の両方から編集され、「共有」機能がオンになっているため、一度に複数のライターが使用できます。

このファイルは、いくつかの基本的な書式が設定された適切な量のデータを複数のシートに収めており、以前は約6MBでしたが、その内容には妥当と思われます。しかし、数週間の編集後、ファイルのサイズは10 MBになり、その後20 MBになり、以前とほぼ同じ量のデータが残っているにもかかわらず、最終的に150 MBを超えるまでに急増しました。開くのに5〜10分かかり、保存するのにそれだけの時間がかかります。

これが初めて発生したとき、各シートの内容を新しい空白のブックにコピーし、新しいブックを保存しました。これにより、約6MBに戻りました。今、それは再び爆発しました。

ワークブックは「データ検証」機能を使用して、特定の列の値をいくつかの名前付き範囲の内容に制限します。すべてのデータを新しいワークブックにコピーするということは、すべてのデータ検証を再設定することを意味します。これは面倒であり、毎月やりたいことではありません。

トラブルシューティングの手順として、「XMLスプレッドシート2003」形式でファイルを保存してみました。何が保存されているかを理解するためです。案の定、ファイルはほぼギグで、1000万行のほぼすべてが次のようになります。

<NamedCell ss:Name="Z_21D5114F_E50C_46AC_AA4F_C3FF540C717F_.wvu.FilterData"/>
<NamedCell ss:Name="Z_1EE2BA5E_3011_4F9A_8ACD_E58835250FC4_.wvu.FilterData"/>
<NamedCell ss:Name="Z_1E3BDCEA_6A72_4ECC_BF4F_7B03CC66181E_.wvu.FilterData"/>

Excelの組み込みインターフェイスで非表示になっている名前付きセルを管理および列挙するためのオンラインのVBScriptをいくつか見ましたが、1000万個の名前付きセルをどのように処理するのか不思議ですしかし、私が本当に必要としているのは、なぜこれが起こり続けるのかを理解することです。 Excelのどのアクションがこれを引き起こしている可能性がありますか?

更新:

これが私が試した実験で、もう少し詳細がわかります。

  • 共有をオフにしました。ファイルは巨大なままでした。
  • ファイルを.xlsxファイルとして保存したところ、5MBに縮小されました。
  • 次に、そのファイルを閉じ、再度開いて、共有をオフにしたまま.xlsファイルとして保存しました。再び巨大になりました!
  • '03ユーザーがそのニースのコンパクトな.xlsxファイルを開こうとすると、'07で正常に開いたとしても、開くのに数分かかります。

したがって、これは'03固有の問題のようであり、ファイルを'03形式で保存すると、明らかに'07ファイルにはまったく含まれていなかった大量のジャンクがすぐに再作成されました。

4
Josh

私と一緒に言ってください:Excelはデータベースではありません。

ソフトウェアの設計上の制約に直面しています。トランザクションデータを格納する能力は非常に高いため、複数のユーザーが書き込みを行う場合、調整のために情報のフリクトンを格納する必要があります。大量のデータが含まれているため、トランザクションコピーは膨大です。

Microsoftは(正しく)大量のデータがある場合、データベースに保存され、Excelをフロントエンドとして使用していると想定しています。

そのように作業する場合は、少なくとも小さなAccessデータベースをまとめる必要があります。それはそのように機能するように意図されており、Excelはそうではないので、それはあなたに頭痛の世界を救うでしょう。

@ジョシュ:はい、それは絶対にIS漏れています。ドキュメントを共有するとき、すべてのユーザーが行った変更を追跡する必要があります...これを「トランザクションデータ」と呼びますが、 「公式」バージョンは決してないので、変更を追跡し続け、ドーナツショップのドキュメントはKirstie Alleyよりも速く膨れ上がります。

これは仕様によるものです。 Excelの第一人者は、それを止める方法を教えてくれるかもしれませんが、最善の解決策は、絶えず維持されているデータにExcelを使用しないことです。それは実際にはそれが設計されたものではありません。

私はあなたの問題に同情していますが、不幸なハッキングを長引かせようとするよりも、問題を上層部に説明し、新しい手順を実行する方が良い解決策です。

@Josh:一度だけ縮小したい場合は、一時的にすべてのデータをコピーして、新しいスプレッドシートに貼り付けます。これにより、すべてのメタデータが強制終了されます(シート全体を選択するのではなく、データが含まれる部分のみを選択するようにしてください)。ただし、これはせいぜい一時的な解決策です。

12
Satanicpuppy

カスタムビューの問題が発生しているようです。見る:

_#wvu#FilterDataのものを削除するにはどうすればよいですか?
http://www.tech-archive.net/Archive/Excel/Microsoft.public.Excel/2006-12/msg00704.html

カスタムビューを無効にするにはどうすればよいですか? (スクロール)
http://www.eggheadcafe.com/software/aspnet/30197438/how-do-i-disable-custom-v.aspx

2
ane

簡単な一時的な修正のために、共有をオフにしてファイルを保存し、余分な荷物がダンプされるかどうかを確認できますか?より良い解決策を得るには、これをデータベースに変換する必要があります。データベースを作成する時間と専門知識がない場合は、Googleのスプレッドシートを見たことがありますか?マルチユーザーの同時編集を改善するために書き直しただけです。

1
Matthew

http://answers.Microsoft.com/en-us/office/forum/office_2007-Excel/why-do-my-Excel-files-become-huge/8235dc08-aa70-4a65-9892-b776790d79c5

これを試して

  1. 最後に入力されたデータの行を特定し、その下の1行のセルをクリックします
  2. その行から最後まで選択し、すべての行を削除します
  3. 列についても同じようにします
  4. ファイルを保存して閉じます
  5. MSExcelをシャットダウンします
  6. ファイルを再度開く

これで問題は解決しましたか?

0
Enjark Valman

また、[ファイル]メニューから[名前を付けて保存]を実行することもできます。

Excelは、Wordや他のOfficeメンバーとともに、元に戻す履歴をファイルに保存します[〜#〜] long [〜#〜]時間。

したがって、「名前を付けて保存」を実行し、新しいファイル名を選択して、2つのファイルのサイズを比較します。新しいものが予想どおりに縮小した場合は、古いものの上に戻し、陽気な道を進んでください。

ただし、Excelがnotデータベースであると指摘する他のコメント投稿者は正しいです。はい、それは1つのように機能し、小さなデータセットに適しています。しかし、あなたが説明していることについては、新しいソリューションに移行する必要があります。

追加情報:
計算、すべてのフォーマット、およびその他の種類の「これを実行させる_____」は、ストレージのオーバーヘッドを増加させます。これらの種類のものがワークブックに関連付けられている場合、1MBのシートはすぐに100MBに増加します。

0
warren