pyExceleratorのセル幅の設定は中々厄介な特徴がありました。
幅指定で指定した値が生成されたExcelファイルで確認してもポイント、ピクセルのいずれの値にもあてはまらりませんでした。ExcelはTwipという単位も使っているようなのでWikipediaのTwipのポイントやピクセルとの変換式も試してみましたが希望する値になりませんでした。
そのため地道に色々な数値で生成して確認を繰り返したところ以下の式で希望する値を設定できました。
※ここの式、公式のドキュメントやソースで説明してある場所など知ってる人がいたらコメント下さい<(_ _)>
・ポイント単位で指定したい場合
(希望する値) * 256 + 1280 / 7
・ピクセル単位で指定したい場合
(希望する値) * 256 / 7
・ピクセルとポイントの関係
ポイント | ピクセル |
---|---|
1 | 12 |
2 | 19 |
3 | 26 |
4 | 33 |
となるため「ポイントの値x7+5=ピクセルの値」の関係があるようです。
・幅に設定できる値の上限は 65535 まで
※それ以上の値を指定すると以下のエラーとなります。
プログラムは以下の様になります。
# -*- coding: utf-8 -*- import pyExcelerator w = pyExcelerator.Workbook() ws = w.add_sheet(u'シート(1)') # 1列目の幅を100ピクセルにする size = 100 width = size * 256 / 7 # ピクセル単位に変換する計算式 c = 0 ws.col(c).width = width ws.write(0, c, 'width : %d' % width) # 2列目の幅を15ポイントにする size = 15 width = size * 256 + 1280 / 7 # ポイント単位に変換する計算式 c = 1 ws.col(c).width = width ws.write(0, c, 'width : %d' % width) w.save('col_width.xls')
セルの幅は以下の部分で指定しています。col()の引数は列の位置を指定。
ws.col(c).width = width