2008年7月11日

面倒くさがり屋のためのMS-Word 2007ファイル解読法

Samstag, Juni 26, 2010 追記:MacOSX 10.6ならもっと簡単なやり方がありました。新しい記事をお読みください。下のは古い記事ですが、お暇ならどうぞ。


MS-Word2007文書(.docx)の実態は、ZIPでアーカイブされたXMLファイル群です。本文はその中のword/document.xmlにUTF-8テキストとして入っています。ただ、書式関係のタグがてんこもりなので、そのままでは読みにくくてしかたありません。そこで、sedを使ってじゃまものをどけようというわけです。

たとえば、デスクトップにある「hoge.docx」というファイルを読みたいとしますね。
moria:~ tac$ cd Desktop/
moria:~/Desktop tac$ mkdir docx
moria:~/Desktop tac$ cd docx/
moria:~/Desktop/docx tac$ unzip ../hoge.docx
Archive: ../hoge.docx
inflating: [Content_Types].xml
inflating: _rels/.rels
inflating: word/_rels/document.xml.rels
inflating: word/document.xml
inflating: word/theme/theme1.xml
extracting: docProps/thumbnail.jpeg
inflating: word/settings.xml
inflating: word/fontTable.xml
inflating: word/webSettings.xml
inflating: docProps/core.xml
inflating: word/styles.xml
inflating: docProps/app.xml

moria:~/Desktop/docx tac$ cd word/
moria:~/Desktop/docx/word tac$ gsed -e 's#</w:p>#\n#g; s#<[^>]*>##g' document.xml > document.txt
これでもとのWord文書のテキストが「document.txt」に書き出されているはず(UTF-8テキストです)。



あ〜... がっかりしました?

.docx文書ファイルが読めなくて、検索したら、このページたどり着いてしまったみなさん、すみません。unix系OSにさわったことのある人、sed遣い向けです。sedはMS-Windows版もあるんですけどね。

上のは、MacOSX10.4.11での実行例。ただし、sedはOS附属のじゃなくてGNU sed version 4.1.5です。


なお、GNU sed をインストールするのが面倒な人は、document.xmlをviまたはVimで読み出して、
:%s#</w:p>##^M#g
:%s#<[^>]*>##g
ってやってみてください。なお、「^M」は「Ctrl+V Ctrl+M」ですけど、vi遣いには言わずもがなですな (^_^)

0 件のコメント: