pyExcelerator で行の高さを自由に設定する

python でXLS 形式のデータを作成できるpyExcelerator というのがありますが、そのままだと行の高さを自由に設定することができません。スクリプトを修正してやると自由に設定できるようになります。


いじるのは、Row.py です。Python/Lib/site-pacages/pyExcelerator/Row.py です。


まず109 行目

        self.__has_default_format = 0
        self.__has_default_height = 0 #0x01
        self.__height = 0x00FF

self.__has_default_height が1 で初期化されているのを0 に変更します。


続いて191 行目

        options |= (self.hidden & 0x01) << 5
        options |= (0x01 & 0x01) << 6 # (0x00 & 0x01) から変更
        options |= (0x01 & 0x01) << 8

options の6 ビット目に1 が設定されるように変更します。この意味は、BiffRecords.py のクラスRowRecord のコメントをみると書いてありますが、行の高さとデフォルトのフォントの高さが一致していないフラグだそうです。なぜここをいじるとうまくいくのかはちゃんと調べたわけではありません。勘でいじったらたまたまうまくいきました。


この様にスクリプトを修正したうえで、

from pyExcelerator import *
wb = Workbook()
ws = wb.add_sheet("test")
ws.write(0, 0, "test")
ws.row(0).height = 180     # 単位は1/20 ポイント
wb.save("test.xls")

こんな感じでスクリプトを書いてやれば高さを自由に変更できます。行の高さは1/20 ポイント単位なので、結構大きめの数字にしないと行がつぶれて見えません。1 ポイントが何ピクセルになるのかは、とりあえず大体で事足りているので調べてません。前に調べたかも知れませんが忘れてしまいました。