相生あおはの書庫

ねこにうもれたい。

【修論修復】壊れたWordファイルの直し方

※この記事は とんえぼ老人部 Advent Calendar 2022 8日目の記事です

 

こんにちは。再び相生あおはです。

今回は、修論データを修復した話を書きます。

修論壊れてヤバイわよ!ってなってる人の助けになれば幸いです。そうじゃない人は今すぐバックアップを取れてるか確認しよう。取れてなかったら取っておこう。悪いことは言わない、本当に。

ヤバいわよ!!(illust. いもねぎ)

ちなみに、原理的にはExcelPowerPointも直せると思います。試したこと無いけど。

 

もくじ

 

0. 事の発端

それは就寝直前の猫の元に届いた、とあるアヒルからの緊急連絡だった。

緊急連絡

ここから1時間半にわたる決死の修論救出劇が始まるのであった─────。

※続きのドキュメンタリーは5節でご覧頂けます。

 

1. 修復チャート

  1. 拡張子.docx.zipに書き換え(念のためバックアップを)
  2. 出来たzipを解凍
  3. 各階層に入ってる各xmlファイルの構文をチェック、壊れてるものを修正する

以上!簡単だね!!

なお、xmlの構文チェックはChrome(ローカル環境)で出来ます。修論といった部外秘なファイルでも安心です。

wordファイル「わ、私はzipファイルです…」

 

2. 構文チェック手順

簡単。Chromeで該当xmlファイル開くだけ。この時、構文エラーがあると怒られるだけでなく、ご丁寧に該当箇所を教えてくれます。たとえば今回、document.xmlを開いてみたら、右のように怒られたので、document.xmlの2行目の17117文字辺りを開いてみましょう。

正常時(左)とエラー時(右)

該当箇所はここら辺らしい、けど。

Chromeで指摘された場所と実際の場所は結構ズレるので、怪しい箇所をタグごとに改行して怒られる行数が変わるかを見てみましょうxmlファイルはタグで管理されてるため、いくら改行しても構文的には同じ意味なので大丈夫です。

ワチャワチャ探した結果、エラー部位が今度こそ特定できました。

エラー部位が特定できた

エラー部位の特定方法ですが、エラーメッセージ下に出てくる文章が途切れている場所を目星に探すと分かりやすいかもしれません。

"ある物質の"近傍が怪しいことが分かる

 

3. xml修復

頑張る。人海戦術です。ここ、何かいい方法あったら教えてください。今回はtag mismatchエラーですので、いろいろ順番を入れ替えてみましょう。

タグの順番を修正。

エラーが消えた!やったね!

また今回はtag mismatchエラーだったのでこれで対処できましたが、tag missingとかだったら適切なタグを追加してあげる必要があります(たぶん)。また、タグが消失してても違うタグを認識してtag mismatchとなってる場合も考えられますので、エラーが消えるまで根気強くマジでいろいろ頑張りましょう

今回は模擬ファイルで実演したのであっさり終わったように書いてますが、実際はもっと大変でした。ちなみに今回のために準備した模擬ファイルはこんな感じ。

修羅場ってそうなやり取り

そういえば私は生化学畑出身なんだった。忘れかけてた。

 

4. wordファイルの構造

例えば今回の模擬ファイルだとこうなってました。例えば、word/media階層にはwordに挿入した画像等の素材が格納されています。

word.zip
├ _rels
├ customXml
├ docProps
├ [Content_Types].xml
└ word
    ├ _rels
    ├ media
    ├ theme
    ├ comments.xml
    ├ commentsExtended.xml
    ├ commentsExtensible.xml
    ├ commentsIds.xml
    ├ document.xml
    ├ endnotes.xml
    ├ fontTable.xml
    ├ footer1.xml
    ├ footnotes.xml
    ├ people.xml
    ├ settings.xml
    ├ styles.xml
    └ webSettings.xml

各wordファイル本編の情報を格納してそうなのは以下のファイル。ただ、影響範囲は最初は分からないと思うので、必要に応じていろいろ修正してあげましょう。

  • comments*.xml…コメント関係の情報を格納。
  • document.xml…文章本編。フォント設定とか画像の参照先とかも格納。
  • fontTable.xml…使用フォント一覧を格納。
  • footer1.xml…フッターの設定内容を格納。ヘッダーを設定するとheadder1.xmlみたいなのも生成されそう
  • footnotes.xml…脚注関係の情報を格納。
  • people.xml…コメントとかに関与する人物の情報を格納。

 

5. 修論修復ドキュメンタリー

1,600kmの旅から1月20日に帰って来て以降、私は修論の追加データを取る毎日でした。

semicolon0103.hatenablog.com

1月24日の25時頃、修論のために作ってたプログラムに追加した機能のエラーを潰し終えて、ようやく寝ようとした瞬間。突如Discordが\ヒョコッ/と鳴ったんですね。

寝耳に濃硝酸。

「wordファイルって壊れるんだ…」修論時期に不具合が起こるジンクスは本当だったんだ…」というのが率直な感想でした。最初は思わず反射でパソコンの健康状態をチャットで聞いてましたが、すぐ我に返る。いち早く修復しなきゃ。頭のスイッチをオン。眠気を吹っ飛ばして本気モードに入ります。

当然私もwordの修復なんて初。方法を模索するところから始めますが、日が昇るまでには修復して欲しいとのこと。成功経験がないので確約できません。予防線が張れない。一発勝負。

まずは私の環境でも、自分の修論データをzipにして解凍してできた、wordだったものの階層構造と各xmlファイルの内容物を調べます。そしてdocument.xmlに本編が入ってるっぽいことが分かります。本編の修復ならまずここを着手すべきと考え、すかさずwordファイルの拡張子書き換えと解凍とword/document.xmlの状態確認を指示。

修復対象ファイルの特定完了

すると、いもねぎがxmlファイルを偶然Chromeで開いたらしい*1。こ~れがマジでファインプレイ。するとエラーメッセージが出たと言うので、すぐチャットにペタってもらいました。

いろいろ情報をやり取りすると思い、当時研究室にいたらしいいもねぎと通話を開始。事態の深刻さを声のトーンから秒で察しました。他にもすることが無いかと聞くと「ある」とのことだったので、そちらの作業はやってもらい、document.xmlを送ってもらって修復は私が行うことに。

実際のもの

2節でも書きましたが、指摘される箇所と実際のエラー箇所はズレてるんですね。それに気づいた時は頭が真っ白になりました。もう為す術は無いのかと。しかし絶望している猶予すらない。タグを改行しまくって、エラー箇所がどう変化するかを見て特定する作業を進めました。

作業開始から30分後。本当のエラー箇所を特定したように思われ、思わず元気を取り戻した私ですが、Chromeで開くと別のエラーが出ました。ここまでかと思わず頭を抱え込みました。結論から言うと、3つのタグがえげつない広範囲に取っ散らかってる状況でした。しかし裏を返せば、この3つのタグを修正してしまえばいいだけのことです(脳筋)。泥臭い人海戦術には自信があります。サクラエディタの検索結果とChromeの実行結果の変化に目を光らせながら、一つずつ着実に潰していきます。

それから1時間、作業開始から1時間半後。Chromeで実行したらようやく全エラーが消えました。思わず喜びそうになりますが、本当にこれでwordが修復できるとはまだわかりません。修復完了を言い渡しそうになりましたが、はやる気持ちを抑えてwordファイルの復元作業を指示。修復を終えたdocument.xmlをチャットに送り、差し替えてもらい、フォルダを圧縮してもらい、今度は逆の手順で拡張子を.docxに書き換えてもらい、内容が復元しているかチェックしてもらいます。

藁にもすがる気持ちで渡す

通話先から最初に聞こえたのは、いもねぎの「ひらいた…」の一言。修論時期の悪魔に打ち勝つことができた瞬間でした

友人の危機を救えた喜び、「Office系ファイルの構造がzip形式である」という無駄知識が史上最高に人の役に立ったという喜び。修復方針が正しかったという喜び。などなど…。思わず無邪気に喜んじゃいました。

これでダメだった場合、document.xmlから文章データを抽出するプログラムを突貫で作る覚悟をしていたので、ひとまず安堵感。そして、その後の通話から修論が無事に完全に復元出来たことを確認。正直なこと言うと、まさか本当に完全復元できるとは私も流石に思ってもいませんでした。できちゃったよ。途端に1時間半の疲労が押し寄せます。

私にできることはもう無くなったということでしたので、通話を終えました。アドレナリンの放出は応答が遅いGタンパク質共役型なので、疲労は押し寄せてはいるものの暫くハイ状態が続きます。寝れなくなっちゃったので、富山県魚津市から密輸しておいた、冷蔵庫で冷やしていた鱒ずしをゆっくり食べてから眠りに就きました。

魚津駅徒歩5分のお店から密輸した鱒ずし 超おいしかった

後から修正内容を見返しました。

実際の修復内容

mc:Choiceの閉タグがとんでもない所にすっ飛んでました。さらにw:insおよびmc:AlternateContentの閉タグの前後関係も入れ替わってました。こんなんわかるわけないやろ!!!!!!!

※注、~~部分にはそれぞれ3,000~4,000文字が存在していました。鳥取砂丘から黄色いビー玉を探すくらい本当に大変でした。

 

6. 考えられる原因

事故対策委員会的な。結論から言うと、原因不明でした。強いていうならパソコンハードの経年劣化、寿命かと。

まずは事情聴取。聞くところによれば、通常の使い方、保存の仕方だったそうで、特段負荷を掛けるようなことはしていなかったといもねぎ談。

ほぼ確で保存に失敗したタイプであろうと思い、メモリおよびストレージの空き容量を確認しましたが、そうでもなさそうでした*2。また、見せてもらったタスクマネージャのスクショからはCPUの占有率が99%くらいに張り付いていることが分かりましたが、それで保存失敗することなんてあるんかなぁ、と。

ただ、時間が無かったので見せてもらってませんが、SSDの健康状態が劣化していた可能性は大いにあると思います

 

7. 対策

大切なデータは分散保存をしましょう。当たり前かと思われますが意外と忘れるもんです*3

6節で書いたSSDの健康状態に関してですが、この原因は思い当たりがあるんですね。いもねぎが修論執筆に使っていたのはSurface(5Genくらいだっけ?)なんですが、Surfaceシリーズって排熱が著しく苦手な筐体なんだと改めて思いました。公私合わせれば何十枚とSSDを扱ったことがある私ですが、今までで一番寿命を早く削られたSSDは高校~大学3年頃まで私が実際に使ってたSurface(初代)に初期搭載されてたSSDでした。大学・大学院在学時、使ってる人を沢山見てきましたが、その人たちは大丈夫だったんでしょうか。

ちっぽけな筐体に、普通のノートパソコンのように普段から負荷を掛けて熱を籠らせ続けると故障に繋がる、ということでしょうね。まぁ、健康状態を普段からチェックしたり、タブレットを分解してSSDを交換するといったことは、一般的な方はやらないでしょうから、ちゃんとしたパソコンを1台持っておくのがハード面の対策として無難だと思います。そんなお金が無いよって場合は分散保存して運用でカバー。てか分散保存で充分だと私は思います。

 

…ところで私、そんなSurfaceを分解してSSDを交換したことがあるんです。折角なら私が持ついくつかのSSDのデータ等を交えて、Surfaceの実態を暴いていきましょう。多分タブレット端末の内部構造を見たことある方はそういないと思うので、この機会にご紹介したいんですが……っと今日はお時間の方が来たようです!続きは明日!!

 

8. 最後に

悪魔はマジでいます。

大丈夫な今のうちにバックアップを

しっかり取っておきましょう。

 

それでは。

*1:xmlファイルは規定ではブラウザで開くようになってるらしい。

*2:以前私が使ってたスマホで、メモリとストレージの空き容量が少なかった時に撮った写真が破損していたことがあったので、真っ先に疑ってみました。

*3:私は怖かったので、SSDとHDD、自宅サーバ上とUSB上、ノパソ上の5か所に分散保存してました。