0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【備忘録】docxファイルをzip展開して再びdocxに戻したらファイルが開けなくなったときは圧縮対象を疑え

Posted at

結論

こちらのブログに救われました。

経緯説明

Wordの編集作業はとにかく面倒です。小説ではほぼ必須となるルビ振りとかひたすらに面倒くさい(しかもなんか行間が妙に空く)。

というわけで、カクヨム記法で記述したルビを処理してくれるプログラムを作ることにしました。1

(※本記事執筆時点(2022年2月22日現在)では未完成)

知らない人のためにざっくりカクヨム記法について説明しておきます。

たとえば、以下のようなテキストがあるとしましょう。


「|猫の日《ザ・デイ・オブ・キャッツ》は《《もうすぐ終わる》》…………」

この文章が、閲覧時には以下のような感じで表示されます。

猫の日ザ・デイ・オブ・キャッツもうすぐ終わる・・・・・・・…………」

つまり、|の間の文字列に対して《》内部の文字列でルビを振り、《《》》で文字を囲むと傍点を振ってくれるわけです。

この記法は書きやすく見やすいのでとても気に入っています。

閑話休題。

このカクヨム記法を自動でWordのルビに変換するプログラムの開発を現在行っています。「docxファイルを生成するならpandoc使え」とはよく耳にしますが、生憎とpandocはカクヨム記法を処理してはくれません。

ということで自作することにしました。

「ファイルを開こうとして、エラーが発生しました」

まずは実験として、適当にテキストを打ち込んだdocxファイルを保存してzip展開してword/document.xmlを加工、docxに戻してWordで開く……というのをやってみることにしました。

下の画像のtesttest_textedディレクトリはdocxファイルを解凍したものです。

スクリーンショット 2022-02-22 234423.png

たとえばtestをdocxに戻してみましょう。

スクリーンショット 2022-02-22 235302.png

こうやって圧縮して……名前をtest.zipからtest.docxに変更。すると……

スクリーンショット 2022-02-22 235446.png

プレビューを表示してくれません。

スクリーンショット 2022-02-22 235605.png

開こうとするとエラー。

色々ググって「セキュリティの問題だからセキュリティ設定を変更すれば解決する」などの情報も得ましたが、どうやらこのケースは別の原因のようで解決しませんでした。

プログラムの制作を進めつつ、あれこれと仮説を立てては失敗、というのを繰り返すこと数時間…………記事冒頭に貼ったブログを発見し、本当の原因が判明しました。

docxファイルが開けなかった原因

[Content_Types].xmlよりも一段上のフォルダ(通常、元のファイル名のフォルダ)をzip圧縮しても元のdocxにはならず、再度docxを開く際、次のエラーとなるため、注意。

https://ameblo.jp/dosukoifreak/entry-10793351527.html より引用

はい。

つまりここ(↓)が間違いだったわけですね。

スクリーンショット 2022-02-22 235302.png

ただしくは、こう(↓)しないといけない。

スクリーンショット 2022-02-23 002558.png

(まっしろでわかりにくいですが)無事、プレビューできました! ファイルも開けました!

スクリーンショット 2022-02-23 002953.png


  1. なぜカクヨム記法なのかと言うと筆者がカクヨムユーザーだからです。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?