前回の続き
罫線辺りはややこしくなってきそうだな・・・
表示形式の設定
セルに対しnumber_format
を設定することで可能
sheet["A1"].number_format = "0.0" // 小数点第一まで
日時フォーマットも設定可能だが、セルの値がdatetimeでないとうまくいかなかった。
sheet["A1"].value = datetime.datetime(year = 2023, month = 4, day = 5, hour = 11, minute = 22, second = 33)
sheet["A1"].number_format = "yyyy/mm/dd
日時フォーマットについてはdd
とd
で0埋め二桁と一桁といった形で、他の言語と同様のフォーマットが扱える。
日本語の場合(和暦や曜日)は頭に[$-411]
($-ja-JP)をつける
※コラボラトリーだと平成35年と表示されたがライブラリのアップデートがされてないとか?
data_type
でセル内の中身を判定できる。n
はnumber、s
は文字列、d
はdatetimeを表している。
セルのスタイル
横幅と縦幅
セルの横幅と縦幅はcolumn_dimentions
を使う。
cell.column_dimentions['B'].width = 40
cell.column_dimentions[2].height = 60
テキストの配置位置
from openpyxl.styles.alignment import Alignment
でAlignmentを使えるようにする。
セルのalignmentにhorizontal(水平)/vertical(垂直)を指定する。
from openpyxl.styles.alignment import Alignment
cell.alignment = Alignment(horizontal="center", vertical="center")
罫線の設定
Alignmentと同様にBorderを取得する。上下左右の設定が必要。
from openpyxl.styles.borders import Border, Side
cell.border = Border(
top=Side(style="thin", color="000000"),
right=Side(style="thin", color="000000"),
bottom=Side(style="thin", color="000000"),
left=Side(style="thin", color="000000")
)
max_rowとmaxColumn
この二つは使われているセルの最終行と列を取ってくるが、今回のような罫線が付いているセルも対象となる。
つまり、セルに文字が13行目まであっても、14行目以降のセルに罫線などが付いていると判定されるので注意。
ちなみに選択したセル①の下に罫線を引いた場合と、セル①の下のセル②の上に罫線を引いた場合、見た目は同じになるが、最終行の判定は罫線の対象となったセルの位置が適応される。(前者はセル①の行、後者はセル②の行が取得できる)
まとめ
セルの罫線問題は結構面倒な気がしている・・・見た目が同じでも取得できる値が違うのは結構イタイ。セルの中で値があるか等一回チェックしてから使う方がよいかもしれない。
気を付けよ・・・