最近、Excel2007から採用されているOpenXMLフォーマットの動的出力機能を作ったりしています。
このOpenXML、すでにISO標準のOpenDocumentという規格があるにもかかわらず、
Microsoftが独自に制定してECMAに標準として通したという曰くつきの代物なんですが、
技術的観点からしても、なかなか酷いフォーマットです。
具体的に何が酷いかは今後何回かに分けてエントリを挙げていくつもりです。
グラフの軸の文字の傾きの設定
いきなりマニアックなセッティングで申し訳ないのですが、
グラフを書いた時に、軸の文字列を傾けて表示する機能があります。
横軸の日付が斜めに表示されているのが分かるでしょうか。
軸の書式設定 → 配置 → ユーザー設定の角度 で設定できます。
この部分のOpenXMLの記述は以下のとおり。
<c:txPr>
<a:bodyPr rot="-2700000" vert="horz" />
<a:lstStyle />
<a:p>
<a:pPr>
<a:defRPr sz="700" b="0" i="0" u="none"
strike="noStrike" baseline="0">
<a:solidFill>
<a:srgbClr val="000000" />
</a:solidFill>
<a:latin typeface="HGS創英角ゴシックUB" />
<a:ea typeface="HGS創英角ゴシックUB" />
<a:cs typeface="HGS創英角ゴシックUB" />
</a:defRPr>
</a:pPr>
<a:endParaRPr lang="ja-JP" />
</a:p>
</c:txPr>
角度を表わすのはa:bodyPr要素のrot属性なのですが、-45度に対して数字は-2,700,000という値になっています。
1度あたり60,000という数値で、1度の60分の1である1分(いちふん。1'と記述する)あたり1000です。
角度を表わす単位としては「分」の60分の1の1秒(いちびょう。1"と記述する)というものもあり、
緯度経度などは秒単位で表現されますね。
wikipediaによれば
分と秒が六十進法でありわかりにくいことから、度のみを用いて、度以下は小数によって値を示すことが好まれる。
とあります。度では精度が足りないのであれば、度の1000分の1などとするか、
もしくは、秒単位にすればよいのですが、Microsoftは分という半端な単位の1000分の1という珍妙な単位を選択したようです。
これを世界標準の規格に通そうというのですからたまりませんね。
ともかく、OpenXMLでは角度をラジアンでもなく、度の1000分の1でもなく、秒でもなく
ミリ分という単位で扱っています。
投稿日時 : 2008年1月24日 22:47