hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

xdoc2txt/KWIC Finder の Microsoft Office 2007対応について

xdoc2txtとKWIC FinderをMicrosoft Office 2007に対応させるべく、作業中である。ほぼ、従来のOffice文書と同様のテキスト抽出ができるようになった。2月中にはリリースできると思う。

Microsoft Office 2007では標準のファイルフォーマットがXMLベースのものに変わっている。Office Open XML(OOXML)としてEcmaの標準として認可されている。ファイル形式の詳細は以下のとおり。

TC45 - current work

OOXMLの実態はZipアーカイブされた複数のXML文書群なので、拡張子を.zipに変更すれば、そのまま中身を見ることができる。
なお、OpenOffice.orgのファイル形式も同様にZipアーカイブされたXMLなので、ついでなのでxdoc2txtとKWIC FinderではOpenOffice.orgにも対応する予定である。OpenOffice.orgのODFの仕様は以下のとおり。

OASIS Open Document Format for Office Applications (OpenDocument) TC | OASIS

ファイルフォーマットが完全に公開されているので、解析の作業が必要ないのはありがたい。技術的に難しいとすれば、zipファイルをメモリ上で展開することだが、これはzlibでできることがわかった。
外部DLLをつかわずにZIPを解凍する(VC++でzlibを使用する)
おかげで統合アーカイバプロジェクトのUNZIP32.DLL を使わないですんだ。

さて、巷ではすでにMicrosoft Office2007が発売されており、無料で公開されていたMicrosoft Office2007βの試用期限も切れてしまった。xdoctxtのサポートのために、いずれは買わないといけないと思うが、とりあえず従来のMS Officeでも、Microdoftの提供している互換機能パックで、Office2007のファイルが一応読み書きできる。

http://www.microsoft.com/downloads/thankyou.aspx?familyId=941B3470-3AE9-4AEE-8F43-C6BB74CD1466&displayLang=ja
ところがこの「Word/Excel/PowerPoint 2007 ファイル形式用 Microsoft Office 互換機能パック」は、機能的に制約がある。
確かにWordでは通常のdocと同様に、透過的にdocxの読み書きができる。つまり、「名前をつけて保存」で.docxを選択できるし、ファイルを開くときも.docxを指定できる。ところが、Excelでは「名前をつけて保存」の選択に.xlsxが現れず、EXCELから.xlsxを開こうとしてもエラーになる。
実はこの互換機能パックをインストールすると、エクスプローラで右ボタンを押すと「名前をつけて保存」が現れるようになり、ここで「Microsoft Office Excel 2007ブック(*.xlsx)」を選ぶとファイルを変換できるのである。なんとも面倒だ。従来のOfficeXpやOffice2003でOffice2007のファイルを直接読み書きできるようにしてしまうと、誰もOffice2007に乗り換えないからかもしれない。だが上記のダウンロードページには、そんな制約はどこにも書いていない。まずくない?

なお、個人で高価なOfficeが必要ない方は、KINGSOFT Officeをお勧めする。
製品紹介 - キングソフト - KINGSOFT JAPAN -
これまでOffice互換製品はLotusやOpenOfficeをはじめいろいろと登場したが、どれもレイアウトが崩れるなどの理由で完全な置き換えは難しかった。実験したところ、KINGSOFT Officeがもっとも本家に近いレイアウトが再現される。本家との最大の違いはマクロがないことで、企業では致命的だが、個人の文書作成ならほとんど問題にならないだろう。OOXMLも将来的にサポートするそうである。