新旧MS-Officeファイルの印刷結果を自動比較

 WindowsXPがサポート切れになるそうだ。
 いままでサポートなんかあったのか、というありがちなつっこみは自粛するとしても、要するに「バグが見つかってもう直しませんよ」ということである。
 不良品を売っておいてよく言うよ、なのだが乗り換えなければならないというきっかけにはなる。そこでWindows7なのだが、ある程度コンピュータのハードが分かる人間にとっては、まどろっこしいことこの上ない。きちんとドライブ構成を見せてくれ。もれなくデータをバックアップする自信が僕にはない。

 もっとも問題は他にもあって、ついでにMS-office Suiteも入れ替えになるということだ。
 OSは慣れれば何とかなると思うが(検索機能が一部消えるのはつらい)、オフィスは今まで作ってきたファイル群の互換性が心配だ。
 「ほとんどの場合」大丈夫らしい。しかしこの言い方こそが不安を招く。どこが違うか具体的に、製造元でさえ、つかんでないということだから。そんないい加減なところが「大丈夫」といっても誰が信用するか。こんな連中に汚染水の処理を任せてはいけない。ある意味、汚染水の処理より切迫した問題なのに。

 というわけで、ドレーク少佐よろしく、適当にファイルを開いて比べてゆくという地道な作業が続くことになる。嫌なのは「キミは沢山発見して、修正もきっちりやったからボーナスアップ」とならないということだ。そういえば時効になるくらい前だが、富士通のワープロで作ったファイルをMS-Wordにコンバートしろという仕事がきたなあ。一人すさまじい速度で修正し、標準手順まで書いたが反応は「こんなことやっていいのかあ!」という叱責であった(ちなみにMS純正の裏技は使ったが、技術的制度的に問題があることは一切行っていない。)。周囲はみんな素人なのでチームワークを乱すらしい。それをいうなら僕も文系で客観的には数学が足を引っ張っていたんだがなあ。

 それ以来暇なので(それ以前も暇だったが)、バージョン違いのOffice文書の印刷イメージに差がないか確認するソフトを作ろうと思った。誰も書いている様子がないので世界初である。できれば世界一の天才である。ところが私はコンピュータが苦手なので難しいことはできない。
ちょうどいい機会だ、どれくらい私がコンピュータが苦手か一本のソフトを書く過程を通じて説明しよう。

 単純なバイナリコンペアでうまく行くわけがない。
 コンピュータの得意な人は、多分ファイルを解析して「ここが違う」と見つけだし一覧表を作るソフトを書くだろう。が、そんな才能は持ち合わせていない私は、地道にがんばるしかない。

 要するにOffice旧とOffice新で同じファイルを印刷し、重ねてから明かりに透かして見てやればいいのだ。
 当たりですね。この方法に気がつかなかった人います?いないでしょ。コンピュータの苦手な私だけに、ということはないだろう。やり方はいろいろあるよな。画像加工ソフトでレイヤーを重ねて。白は透明にして。ところが、私はコンピュータが苦手なのでフォトショップエレメンツすら使えない。
 そこで、一発で比較してくれるツールはないか探しました。ありました。Imagemagickとかいいます。Cygwinがいるかなと思ったが・・・コマンドだけならMS-Windowsに移植されているのね。大丈夫。コマンドしか使わないから。

 次は印刷物をどうやってコンピュータが扱える形にするか、だ。要するにイメージファイルに出力すればよい。そういえば以前プリンタの設定を開いたとき、プリンタがつながっていないくせに表示されているプリンタアイコンがあったなあ。ああファイルに出してくれるのね。拡張子はprnか。書き出して、ダブルクリックして、ありゃ単純な画像ファイルではないようだ。でも何かできそう(ごちゃごちゃごちゃ)。おお、TIFにできるではないか。FAXで送ることを考えてくれたのね。
ということで、
a.ファイルを指定し
b.新旧のオフィスでTIFイメージで印刷し
c.それらを比較すればよい。
 ついでに、比較した結果、どの程度ずれているか数値で表すこともできるらしい。
なんか簡単そうでしょ。僕もそう思ったのよね。でもコンピュータが得意な人はすでにこの段階で「割に合わない」とプロジェクトを中止しているかもしれない。
 それは私だって「数値化するとことごとくずれていることが判明するのでやってもやらなくても結果は同じ」とは思ったのですがね。

 印刷のオペレーションをMS-Excelで実行してマクロとして記録。あれ、何も指定が反映されてないよ。まずここで大ショック。しかたなくWebの大海にこぎ出して、使えそうなキーワードを検索先のサンプルコードから抽出。おお、なんとかなった。MS-Excelはこれでいい。ではMS-Wordで。あれ、エラーメッセージですと?このオプションはありませんですか?MSのホームページにはあることになっているのですが。でも出力ファイルを指定するとイメージを出力してはくれるのですね。一瞬ファイルが開くのが気になる人はいやがりますかしら。でも動かないことには仕方ないのですが。
 とこかくファイル出力にはこぎ着けて、ひかーく。あれ、空振りですわ。なぜ、どうして、ですわ。ひょっとして日本語のファイル名は通らないなんて鬼畜米英なことが起こっているとか。おこってますではありませんか。今どきそんなソフトが存在しあそばされるとは。どうします?あきらめは愚か者の結論ですわ。日本語を英語にしてやればいいのですわ。早速自動翻訳・・・ここまで馬鹿ではありません。Googleとかで日本語でサーチかけたときに検索URLとして%がいっぱい詰まった文字列が出てくるざましょ。あれならとおるはずですわ。
 コンバートサブルーチン、ございました。ありがとうございます。というわけで、テスト。MS-OFFICEの新バージョンはインストールしておりませんのでとりあえず現行バージョンで印刷イメージを作って双方を比較してみますわ。おお、すばらしい。相違点ゼロ。が、別のファイルはずれまくりですってよ。おかしいですわね。差分イメージを開きますと。なぜ、どうして、3ページ分が一つの画像に収まってますわ。なんということでしょう。
 途方に暮れたので、またもや海図も持たないままWebの大海をざっぶーん。折からの台風にあおられましたけど、どうやらTIFファイルにはマルチページって構造があって、要するに印刷対象の3ページを重ねて比較しちゃったようです。まーどーしましょう。私はあきらめませんからね。相手が異性だったらこれをストーカーという。
 ページごとに分割しちゃえばいいのです。んでImagemagickちゃんには画像変換というコマンドもついてるみたいで、これで先ほどのTIFをもっとも単純なBMPにしちゃいましょう。すてきですわ。3つにきれいに分かれましたですの。
 私なので当然、複数ファイルの一括比較くらいは考えていて、フォルダごとに分割して出力結果を保存する、程度のことは出来るプログラムとして産んでますので(どうもさっきから女言葉が出てくると思ったら、プログラムを生み育てるというのはあるいみ女性的行為なわけね)、フォルダ階層が妙に深くなっているうえに、印刷イメージ1ページごとにファイルを出力して(つまり印刷対象ファイル名でフォルダを作ってそのなかに1ページごとのイメージを作る)いますと階層があっという間に深くなります。これが先ほどの「%いっぱい含んだ英数字の羅列」となると256バイトをあっさりと越えてしまうのですね。コマンドラインは大丈夫みたいですが、WSHに渡す値が持たない。
 なんとかしたけどプログラムの安定性という面では後退です。

 でもね。動いたよ。同じイメージファイルを比べているとはいえ、差が「オールゼロ」で戻ってくるとそれはうれしい。コンピュータが苦手な僕でもここまで出来る。

 MS-Officeの新バージョンを入れても、MS-Excelだと旧バージョンと共存できるのね。というわけで実験。同じVBAを新旧両バージョンで動かすと、それぞれの印刷イメージを別ディレクトリに作ってくれるよう設計している。
 が、だなあ。これまでも「出来ることになっているが実は出来ない」をさんざん試行錯誤に次ぐ試行錯誤で回避してきたが、ここで最大の「実は出来ない」に出会うことになった。共存環境では新バージョンでVBAが動かない!
 もちろん「開発」タブは表示させたし、セキュリティレベルも調整した。が、ファイルを開くと自動的にマクロが削除される仕様、のようなのだ。そんなこと聞いてないぞ。マイクロソフトと全マスコミは嘘を書いていたようだ。でもさあWindows95はすばらしい、程度の嘘ならまだ許すけど、VBAが動かないを隠すというのはひどすぎやしないか?

 仕方ないので新バージョンのMS-Excelで旧のファイルを開き、印刷イメージを吐き出すをやってから、コンペアだけかけてみた。
 思ったより優秀。どうやらセルの中で位置調整をしていると文字が1ピクセル程度ずれるようだね。左右に寄せると上下に1ピクセル、中央ぞろえで左右に1ピクセルという感じかな?
 VBAさえ動けばほめてやってもいいのだが。

 それでも手動で出力した新バージョンの印刷イメージを使って比較はした。どうやらセル内で位置調整をかけると、1ピクセル程度ずれるみたいです。丸め誤差の問題かな。画像内の文字の位置も行間が変わるみたいですね。使えないことはない。ので、改良。途中ファイル名その他を無理やり英数字に変換するのをリテラル使って回避。プログラムとしての完成度は下がるが、来年4月までの命と割り切った。それに新旧オフィスのPCを用意して、共有フォルダのファイルをつつきに行く、Imagemagickをインストールするというところですでに一般的なユーザーには使えない。環境設定ができる程度の人間が使うことを想定してもよかろう。
 だから自分ところだけでなく、移行サポートを商売にしているところでも採用すれば大きな武器になるのではないかな。こいつはどのくらい印刷イメージに差が出るかを数値化するところまでやってくれるし。

 これで劇的に手間は減るが、なくなるわけではない。差分イメージを印刷、または閲覧して「ちょっちょとゴミみたいな線が残っているだけだから大丈夫だな」の手間は必要。これが「字がずれているけど大丈夫だな」になるともう少し難しくなる。もちろん差がある所だけ抽出してくれるんだから細かく見ていく必要はないし、なれると1枚数秒で終わるだろう。
 しかしながら、妙に自動化・数値化に期待する人はいるかもしれない。そのくせ、ずれが100以下だったら許容、なんて基準は多分作れないんだな、手を抜いてかつ責任を取りたくない人にこの傾向が強いだろう。ホンデ世の中そういう人がえらい多い。

 というわけで結論。ファイルの移行は各自でお願いします・・・え?

フリーソフト開発秘話、目次
ホーム