考え方
数値セルに任意のフォーマットを与えることで実現する。
cell.number_format()
でフォーマットを与える。
フォーマットはExcelVBAで既定の表記を利用する。
今回サンプルで使用するExcelフォーマット用の書式(記号)
;
式を区切る。式の数によって挙動が変わる。
""
文字列として認識させる。
#
桁を表す。その桁に数字があれば表示。
0
一桁の場合はその数字を表示。一桁では無かったら省略。
y m d h m s
年 月 日 時 分 秒
詳細はこちら:microsoft公式ドキュメント
日付、通貨
A列では与える書式をそのまま表示、BとCは各処理をさせた後の値を表示。
import openpyxl as xl
book = xl.Workbook()
sheet = book.active
# セルに値とフォーマットを与える関数
def set_cell(cname, value, fmt):
c = sheet[cname]
c.value = value
c.number_format = fmt
# 3桁ごとにカンマ区切りを指定
keta3_fmt = '#,##0'
sheet["A1"] = keta3_fmt
set_cell("B1", 12345, keta3_fmt)
set_cell("C1", 123456789, keta3_fmt)
# 通貨形式を指定
cur_fmt = '"\"#,##0;"\"\\-#,##0'
sheet["A2"] = cur_fmt
set_cell("B2", 12345, cur_fmt)
set_cell("C2", -12345, cur_fmt)
# 数値のマイナス値を△で表し、赤色にする
num_fmt = '#,##0;[red]"△"#,##0'
sheet["A3"] = num_fmt
set_cell("B3", 12345, num_fmt)
set_cell("C3", -12345, num_fmt)
book.save("format_sample.xlsx")
日時
import openpyxl as xl
import datetime
book = xl.Workbook()
sheet = book.active
# A1 ~ D1 に同じ日時の値を指定
dt = datetime.datetime(year = 2023, month = 4, day = 5, hour = 11, minute = 22, second = 33)
sheet.append([dt, dt, dt, dt])
sheet["A1"].number_format = "yyyy/mm/dd"
sheet["B1"].number_format = "yyyy年mm月dd日"
sheet["C1"].number_format = "hh:mm:ss"
sheet["D1"].number_format = "mm/dd hh:mm:ss"
book.save("format_sample.xlsx")