ブログを書く自分が疲れそうなので、たまにはプログラミングから離れた話でも。
家のPCにあるのはOffice 2003なのに、2007の入った学校のPCでは、ついつい拡張子docxやxlsx、2007からの新形式で保存してしまいます。互換性パックで開けるのであまり困っていませんが。
さてこの新形式、XMLをZIP圧縮したものとなってます。拡張子をzipにすれば圧縮フォルダとして認識されますし、その他の適当なソフトでも解凍できます。中身のXMLはOffice Open XMLと言えば良いようですね。
ふと思ってdocxの中身を解凍した後、別のソフトで圧縮しなおして拡張子をdocxに戻してみたところ、きちんと開けました。本当にただのZIPのようです。
調子に乗ってただのZIPでなさそうなZIPを作ってみました。7-Zipでは、普通のDeflateのほかDeflate64, BZip2をZIPアーカイブの圧縮に指定できるので、それを試してみたところ、Office 2003ではDeflate以外を開けませんでした。パスワード付きZIP (Deflate)も同じく駄目でした。これくらいとっくに誰か試した後のような気がしますけど。
少しまじめに調べようと、site:msdn2.microsoft.comを付けてググると、なんと日本語のページが見付かりました。驚きです – Microsoft SDK for Open XML Formats へようこそ。
そこにはSystem.IO.Packaging APIで中身を読み書きできるとあります。MSDNライブラリでそこを見てみました。
そこは、COMの構造化ストレージを現代風にしたような世界に感じました。ストレージ:パッケージ、ストリーム:パッケージパートと対応しているように見えます(もちろん、パッケージはストレージと違って階層構造にできないなどという大きな違いも見かけますが)。
なんだか、そこにMicrosoftを見付けたみたいで安心しました。根底は変わらないものです。
結局、今日もプログラミングよりの話に落ち着いてしまいました。冒頭の宣言はなんだったのでしょう。
今回取り上げませんでしたが、上のページから辿れるリファレンスにあるように、Microsoft.Office.DocumentFormat.OpenXml.Packaging名前空間にはOpenXMLのDOMが形成されています。未だプレリリース扱いのようですが。
スポンサード リンク |