Excel の列の幅の単位は "MS ゴシック 11pt" で表示可能な文字数で、行の高さの単位はポイント数というのは知っている方も多いと思います。Excel 操作で列の幅と行の高さを設定する際にはこの特殊な単位で値を指定しなくてはなりません。
なんだかとてもややこしそうですが、フォントサイズや Twips 等を考慮したり、Canvas.TextWidth() / TextHeight() を使って計算する必要はありません。とても単純な計算で変換が可能です。
ピクセル数から列の幅を求めるには:
ピクセル数 / 8 または (ピクセル数 – 5) / 8
ピクセル数から行の高さを求めるには:
ピクセル数 * 72 / DPI
とすれば、大体合います。StringGrid の内容を Excel に転記しなくてはならない場合には覚えておくといいと思います。
幅を求める際の 8 という数字の根拠ですが、Excel は 幅100=805px です。これは 800px (内部幅) + 5px (マージン) で、幅200 の時に 1605px、幅1 の時に 13px となります。なので、1文字=8px、マージン 5px で考えればいい事になります。
Excel と StringGrid ではマージンが異なるので 5px というマージンの扱いはちょっと困るのですが、5px=0.38 を足すなり引くなりして辻褄を合わせてください…あまり神経質にならない方がいいとは思います。
高さを求める際の 72 という数字は 1/72=1pt に由来しています。DPI は 96 という数字を指定してもいいのですが、Screen.PixelsPerInch 等を指定するのが筋でしょう。
|