LoginSignup
3
2

More than 5 years have passed since last update.

小ネタ: Word docxパッケージ内の特定ファイルだけを7zコマンドで展開/更新する

Last updated at Posted at 2019-02-22

前提知識: Word docxファイルの中身を探検する - Office Open XML ざっくり入門 - Qiita

※ 本当は小ネタを書きたかったけど、前提知識が大きくなりすぎたので上記記事に書きました。

何がやりたいか

通常、Wordファイル foo.docx の中身をMS Wordなしで編集するには、

  • zipファイルとして展開する
  • XMLファイルを編集する(or アセットファイルを更新する)
  • zipファイルとして圧縮する

という手順を踏む必要があります。

かなり面倒なので、これを簡略化する方法を探していました。

見つけた方法: 7z コマンド (p7zip)で操作する

既にdocxのディレクトリ構造が既知で、特定ファイルだけを編集すればいいと分かっていると仮定します。
(補足 2019-03-03: foo.docx のパッケージ内のディレクトリ構造は $ 7z l foo.docx で確認できます。)

具体的には、 foo.docxのパッケージ内にあるword/document.xml を狙い撃ちで編集したい、としましょう。

  1. word/document.xml だけを展開する
    • $ 7z x -y foo.docx word/document.xml
  2. XMLを書き換える (sedなどで)
    • $ sed "s/<w:tblStyle w:val=\"TableNormal\"/<w:tblStyle w:val=\"BlueTableStyle\"/g" word\document.xml > word/document2.xml
    • $ cp word/document2.xml word/document.xml
  3. word/document.xml だけを元のdocxファイルに戻す
    • $ 7z u -y foo.docx word/document.xml

元ネタ: Custom styles for ODT (and maybe LaTeX and RST) writers · Issue #2106 · jgm/pandoc

補足: 7zコマンドについて

※ あまり詳しくないので、間違っていたらご指摘ください。

「7zip」は元々Windows用のアーカイバで、それをPOSIXシステム(Unixなど)向けに移植したのがが「p7zip」とのこと。

対応フォーマットは下記。

The program supports 7z (that implements LZMA compression algorithm), ZIP, CAB, ARJ, GZIP, BZIP2, TAR, CPIO, RPM and DEB formats.

(macOS版 p7zipのman 7zより)

7zのみかと思っていましたが、ziptar.gzなども扱えるようです。

インストール (macOS)

$ brew install p7zip

以上です。

3
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
3
2