y-matsui::weblog

電子楽器、音楽、コンピュータ、プログラミング、雑感。面倒くさいオヤジの独り言

エクセルのWebページ保存機能で・・

エクセルの機能に、”Webページとして保存”という機能がある。
マクロから使う場合には、ActiveWorkBook.PublishObjects.Addなんていう方法で、領域やHTML書き出しのオプションを指定してHTML保存できる。
このWebページ保存機能、例えば、グラフを5つ含むグラフなら、エクセルファイル名.files\**_image001.gifなんていう連番付きのGIF画像を生成してくれる。*
・・・で、常に連番のグラフが正しく(エクセル上のグラフオブジェクトと1対1で)生成されるものと思いきや(そういう仕様だと思い込んでプログラムを作成したら)、Office2000とOffice2003で違う動きをすることが発覚したのである。

※連番の付きかたにも注意が必要。左上からグラフを描画すると思いがちであるが、複数のグラフを横並びに配置したとき、右側のグラフであっても、垂直方向にちょっとでも上に出ていると、番号が若くなってしまう。これはかなりびびる。なんちゅう仕様や

Office2000は全く問題なく(素直に)グラフオブジェクト1つに対して、GIF画像をひとつ生成するようだ。
しかし、問題はOffice2003である。こちらは、ご丁寧にも同じような内容の画像(例えば、円グラフで、グラフ領域の大きさも同じで、パーセントが同じ=生成される画像が同じ)を間引くのである。
例えば、グラフ8とグラフ5が同じような内容であった場合、グラフ8の画像は生成されず、リンクが005.gifに張られるということ。グラフ9やグラフ10が存在する場合は、その後の連番がずれることになる。
同じような画像がたくさん生成され、ブラウザで描画されることを考えると、同一画像で代表されていても(個人がデータをWeb公開する程度の普通の用途なら)確かに全く問題ない。

結論を急ごう。
エクセルがグラフを間引く仕様に変更された(たぶん)。
                ↓
エクセルにグラフが同一ではないと認識させられれば、グラフが間引かれることはない。(きっと)
                ↓
グラフタイトルに連番(グラフ番号)を入れ、目立たないフォントサイズ、目立たない色で隠すことで、だませる(確認済)

※もちろん、元々グラフタイトルに有益な文字列を入れているのなら、元からユニークなグラフ画像として書き出されているはずだ。

教訓:エクセルの機能を部品として使うと、(表面化されない)エクセルの仕様変更に悩まされることとなる