LoginSignup
2
2

More than 3 years have passed since last update.

PythonでExcel操作【openpyxl - 日付、通貨、日時のフォーマットを制御する】

Last updated at Posted at 2021-03-30

考え方

数値セルに任意のフォーマットを与えることで実現する。
cell.number_format()でフォーマットを与える。
フォーマットはExcelVBAで既定の表記を利用する。

今回サンプルで使用するExcelフォーマット用の書式(記号)

; 式を区切る。式の数によって挙動が変わる。
"" 文字列として認識させる。
# 桁を表す。その桁に数字があれば表示。
0 一桁の場合はその数字を表示。一桁では無かったら省略。
y m d h m s 年 月 日 時 分 秒

詳細はこちら:microsoft公式ドキュメント

日付、通貨

sample1.png
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")

日時

sample2.png

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")
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2