[PHP-users 27307] Re: Spreadsheet_Excel_Writer の setColumn の幅指定について

TAKAGI Masahiro matakagi @ osk2.3web.ne.jp
2005年 10月 28日 (金) 19:38:41 JST


高木です。

At Fri, 28 Oct 2005 17:10:22 +0900 (JST),
MEGUMI Yoshinari wrote:
> 
> Worksheet::setColumnで幅をセットしようとしています。
> ここでセットする「integer $width」ですが、
> これは、excelの列の幅を指定する時に表示される
> 「X.XX(YYピクセル)」のX.XXの方です。
> もしこれが、YYピクセルの方だったら何ら問題なかったのです
> が....
> そもそもこの単位の無い「X.XX」はなんだろうと思って調べて
> みると、
> 「標準フォントにの半角文字がX.XX文字表示される幅」とのこ
> とでした。
> なので、この「標準フォント」を別途指定できれば問題ないの
> ですが、私にはこの関数が見つけられませんでした。
> (ちなみに、現状「Arial」の10ポイントが標準となっていま
> す。)
> 
> 具体的な数値の例では、
> 元:「幅 4.00(37ピクセル)」
> Spreadsheet_Excel_Writer:「幅 4.00(33ピクセル)」
> といった具合です。
> 
気になったので、調べてみました。

実際に「x.xx」から「yy」への変換を行っているのは
 Spreadsheet/Excel/Writer/Worksheet.php
の中にある
 _sizeCol()
という関数で、その中では

 もし『x.xx』が指定されていれば
  yy = x.xx * 7 + 5 (小数点以下切捨て)
 指定されていなければ
  yy = 64

という処理をしているようです(詳細は実際にコードを確認してみてください)。

なので、
> この問題を解決するには、Spreadsheet_Excel_Writerで
> ・「標準フォント」を指定できる。
標準フォントを変更しても(少なくとも Spreadsheet_Excel_Writer において
は)、結果は変わりません。

> ・setColumnの幅をピクセル単位で指定できる。
> かと思うのですが....
> 
> どなたか、解決法をご存知では無いでしょうか?
> 
上のような方式で変換されていることを考慮した上で、ご希望のピクセル値に
変換されるような幅を指定する(あるいはそのような変換関数を自作する)とい
う方法になると思います。

# x.xx = (yy - 5) / 7 (小数点以下切上げ) ?

非公開関数の仕様に依存しているという点で、あまりスマートな解法ではない
のですが……。

-- 
高木 正弘 mailto:matakagi @ osk2.3web.ne.jp


PHP-users メーリングリストの案内