強火で進め

このブログではプログラム関連の記事を中心に書いてます。

セルの幅の設定

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