.xlsx は実は XML が詰まった ZIP
現代の Excel ファイルについて最も役立つ事実は、それが一枚岩の塊では ないということです。.xlsx 形式が登場して以来、ブックはZIP アーカイブであり、そのアーカイブの中には XML ファイルの小さなツリー、ワークシートごとに 1 セット、そしてシートが 参照する共有パーツがあります。あなたの数値、数式、シート名は、それら の XML パーツの中にプレーンテキストとして保存されています。.xlsx という拡張子は、実のところ名前を変えただけの ZIP なのです。
これは 1 分もかからず自分で確かめられます。ファイルのコピーを作り、 そのコピーを report.xlsx から report.zipにリネームして、任意のアーカイブツールで開いてください。中には、 シートごとに 1 つずつ XML ファイルを収めた xl/worksheets/、 テキストを収めた xl/sharedStrings.xml、シートを列挙したxl/workbook.xml といったフォルダがあります。シートの ファイルをテキストエディタで開けば、セルの値がそこにそのまま並んで います。
.xlsx は ZIP です。各シートは XML パーツで、アーカイブは末尾にディレクトリを保持します。このディレクトリを壊すと Excel は難色を示しますが、中のシートはまだ読める状態です。
だからこそ、壊れたブックはたいてい復元できます。破損は 2 か所の どちらかに起きます。パーツを包む ZIP の外殻か、パーツ内部の XML です。ダウンロードが途中で切れると ZIP のディレクトリが壊れます。 これは通常のアーカイブで 「unexpected end of archive」を生むのと同じ障害で、シート自体は切れた箇所の手前で無傷のまま 残っています。問題が外殻にあるとき、それを組み直せばデータは 戻ってきます。データはそもそも最初から傷ついていなかったからです。
まずは Excel 自身の「開いて修復」を試す
Excel が使えるなら、その組み込みの修復が正直な第一歩であり、費用も かかりません。Excel を開き、「ファイル」→「開く」と進んで、ファイルの 場所を参照します。一度クリックして選択し、「開く」ボタンの横にある 小さな矢印をクリックして、「開いて修復」を選びます。 Excel は 2 つの選択肢を示します。「修復」はブック全体の復元を試み、 「データの抽出」はきれいな修復ができないときに値と数式を取り出します。 まず「修復」を実行し、失敗したら「データの抽出」に切り替えます。
これは原本ではなくコピーで行ってください。修復ツールは手つかずの 元ファイルから最もよく機能しますし、「開いて修復」がファイルをさらに 壊してしまっても、次の試みのために原本が手元に残ります。空のグリッドが 返ってきたとき、Excel 自身がエラーを出したとき、あるいはそもそも Excel が手元にないときは、その下にある ZIP と XML の構造が入り口に なります。ちょうど下のエラー別の手順が引き継ぐところです。
正確なエラー文を読み解く
これらは人々が検索ボックスに貼り付ける文字列で、あなたのものと 照合できるようにそのまま載せています。最初のものが最も一般的です。
Excel cannot open the file 'name.xlsx' because the file format or file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file.
このメッセージは同時に 2 つの仕事をこなしていて、それが人を混乱させ ます。ファイルが本当に壊れているときにも、ファイルが本当は .xlsx で ないときにも出るもので、文言はわざと両者の間で曖昧にぼかしています。 その短い兄弟分である The file is corrupt and cannot be opened.は、より確かに本物の破損を指しています。もう一つ出会うのは、Excel が ブックを開けるものの、パーツ内部の損傷を見つけたときに現れる文です。
Excel found unreadable content in 'name.xlsx'. Do you want to recover the contents of this workbook? If you trust the source of this workbook, click Yes.
「はい」をクリックしてください。このダイアログは、Excel が一部 壊れた XML から救えるものを救おうと申し出ているもので、しばしば ブックの大半を救い出します。ときには解析できなかったグラフや書式の 一部を落とすことがあります。よく似た続きのWe found a problem with some content は、同じ申し出を 違う言い回しにしただけです。これらはいずれも、データはおおむね残って いて、その一部を取り巻く構造だけが壊れているという合図です。「not valid」 のメッセージとその 2 つの原因をより詳しく追うには、「Excel cannot open the file」を参照してください。
何が復元し、何が壊れやすいか
壊れたブックからの復元はオール・オア・ナッシングではありません。 そしてここでは、ほとんどのファイル形式以上に期待値が重要になります。 セル G47 の数値が正しく戻ったのかどうかを知る必要があるからです。 規則は構造に従います。データがプレーンで中心的であるほど、よりよく 残ります。
値とテキストはよく復元します。セルの中身、数値、 日付、テキストは、ワークシートの XML と共有文字列のパーツに単純な テキストとして収まっています。それらのパーツが読める限り、データは 忠実に戻ってきます。ここが最も重要で、最も頑丈な部分です。
数式はたいてい復元します。数式は、最後に計算された 値と並んでテキストとして保存されるので、たいてい無傷で戻ります。 内部リンクや定義された名前が壊れていた場合、一部の数式は生の式では なくキャッシュされた結果として戻ることがありますが、いずれにしても あなたが見ていた数値は保たれます。
シート構造は復元します。シート名、タブの順序、 どのセルに何が入っているかは XML に記述されており、それが残っていれば きれいに組み直されます。ZIP の外殻だけを失ったブックは、通常すべての シートが揃った状態で戻ってきます。
書式は壊れやすいです。セルのスタイル、色、列の幅、 条件付き書式は、値とは別に保存され、インデックスで参照されています。 スタイルのパーツが壊れたり、インデックスが古くなったりすると、数値は 残っても見た目は素っ気なく戻ってくることがあります。データは正しく ても、見せ方はやり直しが必要かもしれません。
グラフ、ピボットキャッシュ、埋め込みオブジェクトは 壊れやすいです。これらの複雑なパーツはブック内の別の場所に ある範囲を参照するため、周囲の構造が壊れると真っ先に壊れます。復元 したブックは、グラフが欠けていたり、ピボットテーブルの更新が必要 だったりする状態で開くことがあります。
VBA マクロはしばしば残りません。マクロのコードは XML ではなくバイナリのパーツ(vbaProject.bin)にあるので、 セルを救うテキストベースのサルベージの恩恵を受けません。マクロが 重要なら、見つかる限り古いコピーを取っておいてください。復元した .xlsx がデータとしては完璧に開いても、その裏のコードは失われている ことがあるからです。
そもそも .xlsx ではなかったブック
ファイルを壊れていると扱う前に、なりすましのケースを除外してください。 よくあることで、しかも直し方は無料だからです。多くの Web アプリや レポートシステムは、実際には HTML の表や CSV ファイルを生成する 「Excel にエクスポート」ボタンを提供しておきながら、それにreport.xlsx という名前を付けて、既定で Excel で開くように しています。ファイルはまったく正常で、ただ名前が名乗る形式ではない だけです。Excel はそれを開き、不一致に気づいて、本当に壊れたファイルが 引き起こすのと同じ「file format or file extension is not valid」の メッセージを表示します。
これは数秒で見抜けます。ファイルをプレーンなテキストエディタで開いて ください。最初に目に入るのが <html> や<table> タグなら、それは HTML エクスポートの変装 です。データのカンマ区切りの行が見えるなら、それは CSV です。 いずれの場合も、直し方は修復ではまったくありません。.html や .csv にリネームして開くか、Excel で 「データ」→「テキストから」を使ってきれいにインポートします。健全な HTML ファイルに修復ツールを走らせても何も起こらないので、このチェックが 間違った問題を解こうとするのを防いでくれます。
財務データは見知らぬ他人のサーバーに置くものではない
表計算ファイルは、プライバシーが抽象的でなくなる場所です。あなたの 机の上の壊れたブックは、給与計算の一回分、顧客リスト、あるいは財務 資料である可能性が十分にあり、ふつうのオンライン修復サービスは、 処理のためにまさにそれを自社サーバーへアップロードするよう求めます。 データはあなたのマシンを離れ、あなたが管理できないインフラの上に 置かれます。
修復がそのように動かなければならない技術的な理由はありません。同じ 解析と再構築は、あなた自身のブラウザの中で、あなた自身の CPU で、 ファイルがネットワークを一度も越えることなく実行できます。そうすれば、 サーバー上に侵入されるもの、保持されるもの、召喚状で差し押さえられる ものは何もありません。ファイルはどこにも送られなかったからです。 機密の表計算ファイルにとって、その違いこそが決定のすべてです。 ですから、自分の数値を渡す前に、ツールがファイルをどう扱うのかを 確かめてください。
FAQ
Excel なしで壊れた Excel ファイルを復元できますか?
.xlsx ファイルは XML パーツの ZIP アーカイブなので、セルの値・数式・シートのレイアウトは、アーカイブの中に読めるテキストとして保存されています。Excel 自体がブックを開くのを拒んでいても、修復ツール、いざとなれば ZIP ツールとテキストエディタの組み合わせで、それらのパーツを取り出せます。データにたどり着くのに Excel をインストールしている必要はありません。ただし、復元した結果を表示するには表計算ソフトが欲しくなるはずです。
Excel の「開いて修復」はどう使いますか?
Excel で「ファイル」→「開く」と進み、ファイルの場所を参照します。ファイルを一度クリックして選択し、「開く」ボタンの横にある小さな矢印をクリックして、「開いて修復」を選びます。Excel は 2 つの選択肢を示します。できるだけ多くのデータを復元しようとする「修復」と、完全な修復に失敗したときに値と数式を取り出す「データの抽出」です。まず「修復」を試し、空のグリッドが返ってきたりエラーになったりしたら「データの抽出」を実行します。これはコピーで行い、原本は他のツールのために手つかずのまま残しておきましょう。
Excel が「ファイル形式またはファイル拡張子が正しくありません」と言うのはなぜですか?
このメッセージにはよくある原因が 2 つあります。ファイルが本当に壊れている(多くの場合は切り詰められて ZIP 構造が不完全になっている)か、そもそもファイルが本当は .xlsx ではないか、のどちらかです。よくあるのは、Web アプリがレポートを HTML や CSV として書き出しているのに、それに .xlsx 拡張子を付けているケースです。Excel はそれを開き、中身が拡張子と合っていないのを見て文句を言います。壊れていると決めつける前に、ファイルの正体を確かめてください。名前が間違っているだけのファイルは、修復ではなくリネーム一つで開くからです。
.xlsx ファイルを ZIP として開けますか?
はい。コピーを作り、拡張子を .xlsx から .zip に変えて、任意のアーカイブツールで開いてください。中には XML ファイルのフォルダ構造があります。ワークシートは xl/worksheets の下に、共有テキストは xl/sharedStrings.xml に、ブックの索引は xl/workbook.xml にあります。これは裏技ではなく、形式がまさにそう定義されているのです。パーツを見て回るのは、修復の前にデータがまだ残っていることを確かめる有用な方法です。ただし、それらを手作業で動くブックに組み直すのは骨が折れます。そこを自動化するのが修復ツールです。
財務の表計算ファイルをオンライン修復ツールにアップロードしても安全ですか?
それはファイルがどこへ行くかに完全に左右されます。ほとんどのオンライン修復サービスは、処理のためにあなたのブックを自社サーバーへアップロードします。つまり、給与データ・顧客リスト・財務資料があなたのマシンを離れ、他人のコンピュータ上に置かれるということです。もしそのツールがあなた自身のブラウザ内で修復を実行するなら、ファイルは端末を一度も離れず、サーバー上に漏れるものは何もありません。機密データを渡す前に、そのツールがどう動くかを読んでください。ローカルで処理するものを選ぶのが賢明です。
関連する読み物:壊れたブックのほとんどの背後にある ZIP の障害を扱う「unexpected end of archive」と、正確な文字列別のガイド「Excel cannot open the file」。