styles.numbers【表示形式】モジュール

メモ ( 概要 基本 組み込み表示形式・定数 ) 定数 参考:Excel 組み込み表示形式 (抜粋) 参考:書式記号 関数
クラス: NumberFormat【表示形式 (内部使用)】 NumberFormatDescriptor【表示形式ディスクリプタ】 NumberFormatList【表示形式リスト (内部使用)】

メモ

概要

基本

組み込み表示形式・定数

例:定数 〕〔 例:関数

定数

表示形式

id:builtin_format_code【組み込み表示形式 取得】のインデックス  (実体は、BUILTIN_FORMATS で定義)

id定数表示形式 (区切りで補正)備考
0FORMAT_GENERALGeneralG/標準
1FORMAT_NUMBER0数値
2FORMAT_NUMBER_000.00数値 (小数点以下2桁)
3#,##0数値 (3桁区切り)
4FORMAT_NUMBER_COMMA_SEPARATED1#,##0.00数値 (3桁区切り・小数点以下2桁)
5 ・ロケール対応 (プレースホルダ)
  "$"#,##0_);
  ("$"#,##0)
・Excel 読み込み時
  ¥#,##0;
  ¥-#,##0
・プレースホルダ
  通貨 (ドル記号・3桁区切り)
  (負数:カッコ)
・日本語
  通貨 (円記号・3桁区切り)
  (負数:通貨記号の後にマイナス記号)
6 ・ロケール対応 (プレースホルダ)
  "$"#,##0_);
  [Red]("$"#,##0)
・Excel 読み込み時
  ¥#,##0;
  [赤]¥-#,##0
・プレースホルダ
  通貨 (ドル記号・3桁区切り)
  (負数:赤色カッコ)
・日本語
  通貨 (円記号・3桁区切り)
  (負数:赤色・通貨記号の後にマイナス記号)
7 ・ロケール対応 (プレースホルダ)
  "$"#,##0.00_);
  ("$"#,##0.00)
・Excel 読み込み時
  ¥#,##0.00;
  ¥-#,##0.00
・プレースホルダ
  通貨 (ドル記号・3桁区切り・小数点以下2桁)
  (負数:カッコ)
・日本語
  通貨 (円記号・3桁区切り・小数点以下2桁)
  (負数:通貨記号の後にマイナス記号)
8 ・ロケール対応 (プレースホルダ)
  "$"#,##0.00_);
  [Red]("$"#,##0.00)
・Excel 読み込み時
  ¥#,##0.00;
  [赤]¥-#,##0.00
・プレースホルダ
  通貨 (ドル記号・3桁区切り・小数点以下2桁)
  (負数:赤色カッコ)
・日本語
  通貨 (円記号・3桁区切り・小数点以下2桁)
  (負数:赤色・通貨記号の後にマイナス記号)
9FORMAT_PERCENTAGE0%パーセンテージ
10FORMAT_PERCENTAGE_000.00%パーセンテージ (小数点以下2桁)
110.00E+00指数表示 (仮数部:小数点以下2桁)
12# ?/?分数 (分母1桁)
13# ??/??分数 (分母2桁)
14FORMAT_DATE_XLSX14mm-dd-yy年月日 (アメリカ式・年2桁)
15FORMAT_DATE_XLSX15d-mmm-yy年月日 (イギリス式・年2桁・月:頭3文字)
16FORMAT_DATE_XLSX16d-mmm月日 (イギリス式・月:頭3文字)
17FORMAT_DATE_XLSX17mmm-yy年月 (月:頭3文字)
18FORMAT_DATE_TIME1h:mm AM/PM時分 (12時間表示・午前:AM・午後:PM)
19FORMAT_DATE_TIME2h:mm:ss AM/PM時分秒 (12時間表示・午前:AM・午後:PM)
20FORMAT_DATE_TIME3h:mm時分
21FORMAT_DATE_TIME4
FORMAT_DATE_TIME6
h:mm:ss時分秒
22FORMAT_DATE_XLSX22m/d/yy h:mm年月日時分 ((アメリカ式・年2桁・年月日:スラッシュ区切り)
37#,##0_);
(#,##0)
数値 (3桁区切り)
(負数:カッコ)
38#,##0_);
[Red](#,##0)
数値 (3桁区切り)
(負数:赤色カッコ)
39#,##0.00_);
(#,##0.00)
数値 (3桁区切り・小数点以下2桁)
(負数:カッコ)
40#,##0.00_);
[Red](#,##0.00)
数値 (3桁区切り・小数点以下2桁)
(負数:赤色カッコ)
41 ・ロケール対応 (プレースホルダ)
  r'_(* #,##0_);
  _(* \(#,##0\);
  _(* "-"_);
  _(@_)'
・Excel 読み込み時
  _ * #,##0_ ;
  _ * -#,##0_ ;
  _ * "-"_ ;
  _ @_
・プレースホルダ
  数値 (3桁区切り・数値位置合わせ)
  (負数:カッコ)
  (ゼロ:-)
  (テキスト:そのまま)
・日本語
  数値 (3桁区切り・両端スペース)
  (負数:前にマイナス記号)
  (ゼロ:-)
  (テキスト:そのまま)
42 ・ロケール対応 (プレースホルダ)
  r'_("$"* #,##0_);
  _("$"* \(#,##0\);
  _("$"* "-"_);
  _(@_)'
・Excel 読み込み時
  _ ¥* #,##0_ ;
  _ ¥* -#,##0_ ;
  _ ¥* "-"_ ;
  _ @_
・プレースホルダ
  通貨 (ドル記号・3桁区切り・数値位置合わせ)
  (負数:カッコ)
  (ゼロ:$ -)
  (テキスト:そのまま)
・日本語
  通貨 (円記号・3桁区切り・数値位置合わせ)
  (負数:通貨記号の後にマイナス記号)
  (ゼロ:¥ -)
  (テキスト:そのまま)
43 ・ロケール対応 (プレースホルダ)
  r'_(* #,##0.00_);
  _(* \(#,##0.00\);
  _(* "-"??_);
  _(@_)'
・Excel 読み込み時
  _ * #,##0.00_ ;
  _ * -#,##0.00_ ;
  _ * "-"??_ ;
  _ @_
・プレースホルダ
  数値 (3桁区切り・小数点以下2桁・数値位置合わせ)
  (負数:カッコ)
  (ゼロ:-)
  (テキスト:そのまま)
・日本語
  数値 (3桁区切り・小数点以下2桁・数値位置合わせ)
  (負数:前にマイナス記号)
  (ゼロ:-)
  (テキスト:そのまま)
44 ・ロケール対応 (プレースホルダ)
  r'_("$"* #,##0.00_)_("$"* \(#,##0.00\)_("$"* "-"??_)_(@_)'
・Excel 読み込み時
  _ ¥* #,##0.00_ ;
  _ ¥* -#,##0.00_ ;
  _ ¥* "-"??_ ;
  _ @_
・プレースホルダ
  通貨 (ドル記号・3桁区切り・小数点以下2桁・数値位置合わせ)
  (負数:カッコ)
  (ゼロ:$ -)
  (テキスト:そのまま)
・日本語
  通貨 (円記号・3桁区切り・小数点以下2桁・数値位置合わせ)
  (負数:通貨記号の後にマイナス記号)
  (ゼロ:¥ -)
  (テキスト:そのまま)
45FORMAT_DATE_TIME5mm:ss分秒
46[h]:mm:ss経過時間 (時分秒)
47mmss.0分秒 (区切りなし・小数点以下1桁)
48##0.0E+0指数表示 (仮数部:小数点以下1桁)
49FORMAT_TEXT@文字列
FORMAT_CURRENCY_EUR_SIMPLE[$EUR ]#,##0.00_-通貨 (EUR・3桁区切り・小数点以下2桁・右端:マイナス記号分空白)
FORMAT_CURRENCY_USD$#,##0_-通貨 (ドル記号・3桁区切り・右端:マイナス記号分空白)
FORMAT_CURRENCY_USD_SIMPLE"$"#,##0.00_-通貨 (ドル記号・3桁区切り・小数点以下2桁・右端:マイナス記号分空白)
FORMAT_DATE_DATETIMEyyyy-mm-dd h:mm:ss年月日時分秒 (年月日:ハイフン区切り)
FORMAT_DATE_DDMMYYdd/mm/yy年月日 (イギリス式・年2桁・スラッシュ区切り)
FORMAT_DATE_DMMINUSd-m月日 (イギリス式・ハイフン区切り)
FORMAT_DATE_DMYMINUSd-m-y年月日 (イギリス式・年2桁・ハイフン区切り)
FORMAT_DATE_DMYSLASHd/m/y年月日 (イギリス式・年2桁・スラッシュ区切り)
FORMAT_DATE_MYMINUSm-y年月 (イギリス式・年2桁・ハイフン区切り)
FORMAT_DATE_TIME7i:s.S
FORMAT_DATE_TIME8h:mm:ss@(定義ミス)
FORMAT_DATE_TIMEDELTA[hh]:mm:ss経過時間 (時分秒)
FORMAT_DATE_YYMMDDyy-mm-dd年月日 (年2桁・ハイフン区切り)
FORMAT_DATE_YYMMDDSLASHyy/mm/dd@(定義ミス)
FORMAT_DATE_YYYYMMDD2yyyy-mm-dd年月日 (年4桁・ハイフン区切り)
FORMAT_NUMBER_COMMA_SEPARATED2#,##0.00_-数値 (3桁区切り・小数点以下2桁・右端:マイナス記号分空白)

参考:Excel 組み込み表示形式 (抜粋)

Excel 組み込み表示形式の確認:定義済の項目を選択し、続けて[ユーザー定義]を選択

分類表示形式備考
数値 #,##0_ ;[Red]-#,##0(SP) 数値 (3桁区切り・負数:符号付赤字・右端:空白) -12,345(SP)
#,##0;"▲ "#,##0 数値 (3桁区切り・マイナス符号:▲) ▲ 12,345
通貨 ¥#,##0;[Red]¥-#,##0 通貨 (円記号付き・3桁区切り・負数:符号付赤字) ¥-1,234
日付 yyyy"年"m"月"d"日";@ 年月日 (西暦年:4桁・区切り:漢字) 2001年2月3日
[$-411]ggge"年"m"月"d"日";@ 年月日 (和暦年・区切り:漢字) 令和4年5月6日
その他 [<=999]000;[<=9999]000-00;000-0000 郵便番号 123-4567
[<=99999999]####-####;(00) ####-#### 電話番号 (03) 1234-5678
[DBNum1][$-411]General 漢数字 一万二千三百四十五
[DBNum2][$-411]General 大字 壱萬弐阡参百四拾伍
[DBNum3][$-411]#,##0 全角 (3桁区切り) 12,345

参考:書式記号

書式記号備考
指定方法
[]表示形式
[比較条件]表示形式
[] [比較条件]表示形式
色・比較条件の指定
両方指定する場合は色が先
色指定参考 (未対応)
[Black][黒]
[Blue][青]
[Cyan][水]
[Green][緑]
[Magenta][紫]
[Red][赤]
[White][白]
[Yellow][黄]
比較条件備考
<数値数値より小さい
>数値数値より大きい
=数値数値と一致
>=数値数値以上
<=数値数値以下
<>数値数値と不一致
全てが対象
正数・ゼロ;負数
正数;負数; ゼロ;テキスト

[条件]表示形式 ;表示形式
[条件]表示形式 ; [条件]表示形式 ;表示形式
表示形式指定方法
全てが対象全てのセル値の表示形式
正数・ゼロ正数・ゼロの表示形式
正数正数の表示形式
ゼロゼロの表示形式
負数負数の表示形式
テキストテキストの表示形式
条件の区切り:; (セミコロン)
条件色と比較条件の組合せ
特殊記号
General標準 (未対応:G/標準)
@入力値そのまま表示
(複数条件の最後等に指定)
文字列文字列表示
\文字文字表示 (参照:単独表示可能な文字)
(SP)スペーサー
_文字 (アンダースコア)スペーサー (文字幅分)
*文字 文字埋め込み (セル幅になるまで文字繰り返し)###123
[$-ロケールId] ロケール指定 [$-411]
[$通貨コード] 通貨コード (そのまま表示)[$JPY]・[$USD]・[$EUR]
[DBNum1]漢数字十二万三千四百
[DBNum2]大字壱拾弐萬参阡四百
[DBNum3] 全角12345
1万2千3百4十5
数値
#1桁の数字 (ゼロサプレス)'######' ⇒ 123
01桁の数字 (ゼロパディング)'000000' ⇒ 000123
. (ドット)小数点
?小数部・分数のスペーサー0.???
, (カンマ)桁区切り
1000 で割った小数部を四捨五入
E+
E–
e+
e–
指数
yy西暦 (2桁)01
yyyy西暦 (4桁)2001
e年号1
ee年号 (2桁)01
g元号 (アルファベットの頭文字)S / H / R
gg元号 (漢字1文字)昭 / 平 / 令
ggg元号 (漢字2文字)昭和 / 平成 / 令和
m2
mm月 (2桁)02
mmm英語の月 (頭3文字)Jan~Dec
mmmm英語の月January~December
mmmmm英語の月 (頭1文字)J~D
d3
dd日 (2桁)03
曜日
ddd英語の曜日 (頭3文字)Sun~Sat
dddd英語の曜日Sunday~Saturday
aaa漢字の曜日 (頭1文字)日~土
aaaa漢字の曜日日曜日~土曜日
時間
(※ m・mm【分】:h・hh【時刻】の直後 または s・ss【秒】の直前 に指定)
h時刻0~23
hh時刻 (2桁)00~23
m 0~59
mm 分 (2桁)00~59
s0~59
ss秒 (2桁)00~59
AM/PM
h AM/PM
h am/pm
時 (12時間表示)
(午前午後:AM | PM | am | pm)
h:mm AM/PM
h:mm am/pm
時分 (12時間表示)
(午前午後:AM | PM | am | pm)
h:mm:ss A/P
h:mm:ss a/p
時分秒 (12時間表示)
(午前午後:A | P | a | p)
経過時間
[h]:mm経過時間 (時分・時:24以上も可)
[mm]:ss経過時間 (分秒・分:60以上も可)
[ss]経過時間 (秒・秒:60以上も可)
単独表示可能な文字  (その他の文字は ダブルクォーテーションで囲む\ でエスケープ)
$ドル記号
+
-
正符号
負符号
/スラッシュ
(
)
丸カッコ
:コロン
!感嘆符
^キャレット
&アンパサンド
'アポストロフィ
^チルダ
{
}
波カッコ
<
>
小なり大
大なり小
=等号

関数〔

関数備考
builtin_format_code(index) 組み込み表示形式 取得
戻り値 (str)組み込み表示形式 (None:なし)
index組み込み表示形式インデックス (定数 参照)
builtin_format_id(fmt) 組み込み表示形式インデックス 取得
戻り値 (int)組み込み表示形式インデックス (None:なし / 定数 参照)
fmt (str)表示形式
is_builtin(fmt) 組み込み表示形式チェック
戻り値 (bool)チェック結果
      True:組み込み表示形式
      False:その他
fmt (str)チェックする表示形式
is_date_format(fmt) 日付表示形式チェック
戻り値 (bool)チェック結果
      True:日付表示形式
      False:その他
fmt (str)チェックする表示形式
is_datetime(fmt) 日時表示形式チェック
戻り値 (str)チェック結果
      'datetime':日時表示形式
      'date':日付表示形式
      'time':時間表示形式
      None:その他
fmt (str)チェックする表示形式
is_timedelta_format(fmt) 経過時間表示形式チェック
戻り値 (bool)チェック結果
      True:経過時間表示形式
      False:その他
fmt (str)チェックする表示形式

NumberFormat【表示形式 (内部使用)】クラス

クラス定義

クラス備考
親:openpyxl.descriptors.serialisable.Serialisable
class NumberFormat(
    numFmtId=None,
    formatCode=None)
表示形式
numFmtId (int)
formatCode (str)

プロパティ

プロパティ備考
formatCodestr
numFmtIdint

NumberFormatDescriptor【表示形式ディスクリプタ】クラス

クラス定義

クラス備考
親:openpyxl.descriptors.String
class NumberFormatDescriptor(
    *args,
    **kw)
表示形式ディスクリプタ
args
kw

操作

操作備考
設定(未使用) None 指定は General【G/標準】

NumberFormatList【表示形式リスト (内部使用)】クラス

クラス定義

クラス備考
親:openpyxl.descriptors.serialisable.Serialisable
class NumberFormatList(
    count=None,
    numFmt=() )

count
numFmt

操作

操作備考
項目取得

プロパティ

プロパティ備考
count int

基本

from openpyxl import Workbook
import datetime

# ワークブック作成
WORKBOOK = 'sample.xlsx'
wb = Workbook()
ws = wb.active

# 数値
ws.column_dimensions['B'].width = 16
VALUE_NUM = 1234567
cell = ws['B2']
cell.value = VALUE_NUM
cell.number_format = '0'

cell = ws['B3']
cell.value = VALUE_NUM
cell.number_format = '#,##0'

cell = ws['B4']
cell.value = VALUE_NUM
cell.number_format = '0000000000'

cell = ws['B5']
cell.value = VALUE_NUM
cell.number_format = '*#0'

format = '#,##0_);[Red](#,##0);-_)'
cell = ws['B6']
cell.value = VALUE_NUM
cell.number_format = format
cell = ws['B7']
cell.value = -VALUE_NUM
cell.number_format = format
cell = ws['B8']
cell.value = 0
cell.number_format = format

# 日付
ws.column_dimensions['C'].width = 20
VALUE_DATE = datetime.datetime(2022, 5, 6)
cell = ws['C2']
cell.value = VALUE_DATE
cell.number_format = 'yyyy/m/d'

cell = ws['C3']
cell.value = VALUE_DATE
cell.number_format = 'yyyy"年"m"月"d"日"'

cell = ws['C4']
cell.value = VALUE_DATE
cell.number_format = 'ggg e"年"m"月"d"日"'

cell = ws['C5']
cell.value = VALUE_DATE
cell.number_format = 'yyyy"年("ggg[DBNum3][$-411]e"年)"'

# 正数・負数・ゼロ・テキスト
ws.column_dimensions['D'].width = 16
format ='#,##0;[Red]#,##0;"-";* @'
cell = ws['D2']
cell.value = VALUE_NUM
cell.number_format = format

cell = ws['D3']
cell.value = -VALUE_NUM
cell.number_format = format

cell = ws['D4']
cell.value = 0
cell.number_format = format

cell = ws['D5']
cell.value = 'テキスト'
cell.number_format = format

# 条件
ws.column_dimensions['E'].width = 16
format ='[>100]"(>100) "0;[Red][>10]"(>10) "0;"(etc) "0'
cell = ws['E2']
cell.value = 150

cell = ws['E3']
cell.value = 50

cell = ws['E4']
cell.value = 5

for row in ws['E2:E4']:
    for cell in row:
        cell.number_format = format

# ワークブック保存
wb.save(WORKBOOK)

numbers【表示形式】基本のサンプル画像


定数

from openpyxl import Workbook
from openpyxl.styles import numbers

# ワークブック作成
WORKBOOK = 'sample.xlsx'
wb = Workbook()
ws = wb.active
VALUE_NUM = 1234567
ws.column_dimensions['B'].width = 20
ws.column_dimensions['C'].width = 20
row = 2
col = 2

# 定数
format = numbers.FORMAT_NUMBER
ws.cell(row, col, format)
cell = ws.cell(row, col + 1, VALUE_NUM)
cell.number_format = format
row += 1

format = numbers.FORMAT_NUMBER_00
ws.cell(row, col, format)
cell = ws.cell(row, col + 1, VALUE_NUM)
cell.number_format = format
row += 1

format = numbers.builtin_format_code(3)
ws.cell(row, col, format)
cell = ws.cell(row, col + 1, VALUE_NUM)
cell.number_format = format
row += 1

format = numbers.FORMAT_NUMBER_COMMA_SEPARATED1
ws.cell(row, col, format)
cell = ws.cell(row, col + 1, VALUE_NUM)
cell.number_format = format

# ワークブック保存
wb.save(WORKBOOK)

numbers【表示形式】定数のサンプル画像


関数

from openpyxl import Workbook
from openpyxl.styles import numbers
from openpyxl.styles.numbers import (
    BUILTIN_FORMATS,
    builtin_format_code,
    builtin_format_id,
    is_builtin,
    is_date_format,
    is_datetime,
    is_timedelta_format,
)
import datetime

# ワークブック作成
WORKBOOK = 'sample.xlsx'
wb = Workbook()
ws = wb.active
ws.column_dimensions['A'].width = 2
ws.column_dimensions['B'].width = 4
ws.column_dimensions['C'].width = 60
ws.column_dimensions['D'].width = 20

# 組み込み表示形式
row = 2
for key in BUILTIN_FORMATS.keys():
    format = builtin_format_code(key)
    idx = builtin_format_id(format)
    ws.cell(row, 2, idx)
    ws.cell(row, 3, format)
    cell = ws.cell(row, 4)
    value = 0
    if is_timedelta_format(format):
        value = datetime.timedelta(hours=45, minutes=6, seconds=7)
    elif is_date_format(format):
        type = is_datetime(format)
        if type == 'datetime':
            value = datetime.datetime(2001, 2, 3, 4, 5, 6)
        elif type == 'date':
            value = datetime.date(2001, 2, 3)
        elif type == 'time':
            value = datetime.time(4, 5, 6)
    else:
        if 9 <= idx <= 10:
            value = 0.01234
        elif 12 <= idx <= 13:
            value = 12.34
        elif idx == 49:
            value = 'テキスト'
        else:
            value = -1234567
    cell.number_format = format
    cell.value = value
    if 5 <= idx <= 8 or 41 <= idx <= 44:
        ws.cell(row, 5, 'Local')
    row += 1

# 各種定数
lst = [
    numbers.FORMAT_CURRENCY_EUR_SIMPLE,
    numbers.FORMAT_CURRENCY_USD,
    numbers.FORMAT_CURRENCY_USD_SIMPLE,
    numbers.FORMAT_DATE_DATETIME,
    numbers.FORMAT_DATE_DDMMYY,
    numbers.FORMAT_DATE_DMMINUS,
    numbers.FORMAT_DATE_DMYMINUS,
    numbers.FORMAT_DATE_DMYSLASH,
    numbers.FORMAT_DATE_MYMINUS,
    #numbers.FORMAT_DATE_TIME7,
    #numbers.FORMAT_DATE_TIME8,
    numbers.FORMAT_DATE_TIMEDELTA,
    numbers.FORMAT_DATE_YYMMDD,
    #numbers.FORMAT_DATE_YYMMDDSLASH,
    numbers.FORMAT_DATE_YYYYMMDD2,
    numbers.FORMAT_NUMBER_COMMA_SEPARATED2,
]
row += 2
for format in lst:
    ws.cell(row, 3, format)
    cell = ws.cell(row, 4)
    value = 0
    if is_timedelta_format(format):
        value = datetime.timedelta(hours=45, minutes=6, seconds=7)
    elif is_date_format(format):
        type = is_datetime(format)
        if type == 'datetime':
            value = datetime.datetime(2001, 2, 3, 4, 5, 6)
        elif type == 'date':
            value = datetime.date(2001, 2, 3)
        elif type == 'time':
            value = datetime.time(4, 5, 6)
    else:
        value = -1234.56
    cell.number_format = format
    cell.value = value
    row += 1

# その他関数
print(is_builtin(numbers.FORMAT_DATE_TIME3))
# 出力:True
print(is_builtin(numbers.FORMAT_DATE_DATETIME))
# 出力:False

# ワークブック保存
wb.save(WORKBOOK)

numbers【表示形式】関数のサンプル画像1 numbers【表示形式】関数のサンプル画像2