web-dev-qa-db-ja.com

遅いExcelスプレッドシートを診断していますか?

クライアントから、Excelスプレッドシートを開くのに時間がかかりすぎるとの不満がありました。彼らは請求書を作成するためにExcelを使用しているため、簡単なフォーマットと非常に単純な計算を備えた何百ものExcelスプレッドシートがあります。スプレッドシートをサイズで並べ替えたところ、ほとんどのスプレッドシートは10〜250kの範囲でしたが、ファイルサイズが2〜3 MB以上のスプレッドシートがいくつかあったことがわかりました。奇妙なことに、filesizesはそれほど大きくなく、多くのデータを保持しておらず、わずかな書式設定、おそらく2〜3ページの印刷された請求書ですが、データ量は小さい方とほとんど同じでしたサイズ設定された(および通常のオープニング)スプレッドシート。

ファイルを開くと、必要なRAM必要な量は3 MBから400 MBに急上昇し、シングルコアを完全に占有します(オフィスのデュアルコアでテストされ、 -coreラップトップ)、起動中。何らかの方法でVBAコードをキャッチしたと思いましたが、マクロもVBAコードもありません。Ctrl+ Endを押すと、39行と約12列(Mで終わる)が表示されます。データが行ごと、または列ごとに、データがなくなるまで、同じ問題が発生します。

たくさんのGoogle検索をレビューしましたが、どこにも行きませんでした。誰か助けを提供できますか?

13
Simon Hova

私の問題に対する答えを見つけました!

Allquixoticから与えられた手掛かりを使用して、7-Zipでxlsxファイルを開き、ファイルサイズを比較しました。 非常に大きいファイルが1つありました。ファイルxl\drawings\drawing1.xmlは、フォーマットへの複数の参照を何度も繰り返し含んだファイルでした。

数時間かけてパターンを見つけようとしましたが、できませんでした。私ができることは何もできませんでした!次に、悪化した後、いまいましいファイルを削除し、Excelで再度開こうとしました(2010- Excel 2007ではテストしていません)。

ファイルが破損しているとの不満があり、修復を試みたいかどうか尋ねられました。ファイルを修復しても形状は消去されましたが、ファイルのフォーマットはまったく変更されませんでした。ファイルを同じファイルとして再保存する必要がありましたが、これは少し変でしたが、うまくいきました!

前に述べたように、Excel 2010以外の製品ではこのソリューションをテストしていなかったため、シェープファイルがExcel 2k7またはOpenOffice製品にとって重要であるかどうかはわかりません。しかし、同様の問題がある場合は、これが役立つと思います。

7
Simon Hova

バイナリ.xls形式または新しいXMLベースの.xlsx形式を使用していますか?一般に、.xlsx形式では、ファイルサイズが大幅に縮小されます。

ドキュメントに保存されているスタイルの数が多すぎるなどがないか確認してください。

「個人情報を削除」(Excel/Wordなどの機能)して、ファイルに残っている可能性のある特定の種類の残骸をクリーンアップしてください。

スプレッドシートが共有されている場合、または以前に共有されている場合は、古い共有データが保存されている可能性があります。

簡単な修正の1つは、そのスプレッドシートから関連するデータだけをコピーして新しいデータに貼り付け、それを.xlsx形式で保存して、そのサイズを確認することです。それが非常に小さい場合は、あなたの答えがあります-Excelは、内部ファイル形式のデータ構造の説明が不十分です。

また、複雑な式や循環式、外部シート(特にネットワークドライブ上のシート)への参照を確認してください。数式が遅いと思われる場合は、数式監査ツールを使用して数式をステップ実行できます。

最後に、.xlsxとして保存してもサイズが大きい場合は、OpenXML SDK生産性向上ツールをダウンロードしてみてください。 http://www.Microsoft.com/en-us/download/details.aspx?id= 5124

その中で.xlsxを開き、ファイル内のすべての要素を調べて、明らかに無関係なものがないか確認します。これにはXMLと特定のOpenXMLスキーマの知識が必要な場合がありますが、膨張の原因を特定するための確実な方法です。

追伸-この種のことで不快に感じる場合は、Microsoftのフォーマット/プログラムの使用を中止するか、顧客にそうするように提案してください。 「Microsoft Accessデータベースの肥大化」を探し回ると、Microsoftが独自のフォーマットで大量の不要なデータをディスクにリークさせ、クリーンアップされないという長い歴史があることがわかります。これは、RAMの代わりにディスクを消費する、非常に厄介なメモリリークのようなものです。

6
allquixotic

別の可能な解決策は次のとおりです。

  1. 問題のあるExcelファイルのコピーを作成する
  2. そのコピーを開く
  3. Ctrl + Aキーを押して、[クリア]-> [フォーマットのクリア]をクリックします。
  4. すべてのワークシートで手順3を繰り返します。
  5. ファイルを保存して、もう一度開いてみてください

書式設定が多すぎる場合、特に多くの個別のセルに適用される多くの異なるスタイルがある場合、Excelはファイルを開くときに書式設定を適用しようと本当に苦労します。

当然、すべての書式設定を削除すると、境界線、網かけなどがなくなったすべてのセルで、デフォルトのスタイルが適用されたテキストだけになります。しかし、この方法で問題の原因を特定できます。

2
RusI

サイズを大幅に縮小するには、.xlsb形式を試してみてください。 Excelが提供する他のどのXMLベースのフォーマットよりも削減する必要があります。

これらのスプレッドシートの1つを開いて、フォーマットを確認してください。いつものことを探してください。列全体を別のExcelスプレッドシートにコピーし、値のみを貼り付けてみてください(書式は一切ありません)。それが役立つかどうかを確認します。

0
TwirlMandarin

ワークシート全体で、すべての条件付き書式ルールを確認しましたが、負荷がありました。私はそれらをすべて通過してクリアし、実際に必要なものを作成しましたが、今では本当に高速です。また、不要なすべての「接続」を削除し、すべてが正常に機能した後、.xlsbとして保存しました。これにより、さらに高速になりました:o)

0
Paul

私の場合、問題は「テーブルとしてフォーマット」に関連していました。テーブルには16000個の空の列がありました。これがこの種の問題の最もよくある理由の1つだと思います。

0
Revious