Excelの日付データの実体は、数値です。
表示形式が日付らしく設定されている数値が、日付です。
そのためExcelには、数値であることを判定するISNUMBER関数、文字列であることを判定するISTEXT関数はあるにもかかわらず、日付であることを判定する「ISDATE」といった関数はありません。
そのようなExcelの日付データですが、OpenPyXLでは日付の表示形式が設定されていれば、datetime.datetimeと判定してくれます。
日付書式のセルがdatetime.datetimeであることを確認する
先頭のワークシートのA1:A10セルに、日付「2023/2/14」のシリアル値「44971」を入力して、A2セルには桁区切りカンマ、A3セルには「\」マークと桁区切りカンマを表示する表示形式を、A4:A10セルには下図のようにさまざまな日付の書式を設定したブックを、
Cドライブtempフォルダーにdate.xlsxとして用意しておきます。
その後、以下のスクリプトを実行してください。
bk = xl.load_workbook(r'c:\temp\date.xlsx')
ws = bk.worksheets[0]
print(cel.coordinate, cel.value, type(cel.value))
以下のように出力されます。
A1 44971 <class 'int'>
A2 44971 <class 'int'>
A3 44971 <class 'int'>
A4 2023-02-14 00:00:00 <class 'datetime.datetime'>
A6 2023-02-14 00:00:00 <class 'datetime.datetime'>
A6 2023-02-14 00:00:00 <class 'datetime.datetime'>
A7 2023-02-14 00:00:00 <class 'datetime.datetime'>
A8 2023-02-14 00:00:00 <class 'datetime.datetime'>
A9 2023-02-14 00:00:00 <class 'datetime.datetime'>
A10 2023-02-14 00:00:00 <class 'datetime.datetime'>
A1:A3セルは「44971」というvalueでint型、
A1 44971 <class 'int'>
A2 44971 <class 'int'>
A3 44971 <class 'int'>
A4:A5セルは「2023-02-14 00:00:00」というvalueでdatetime.datetimeと出力されています。
A4 2023-02-14 00:00:00 <class 'datetime.datetime'>
A6 2023-02-14 00:00:00 <class 'datetime.datetime'>
A6 2023-02-14 00:00:00 <class 'datetime.datetime'>
A7 2023-02-14 00:00:00 <class 'datetime.datetime'>
A8 2023-02-14 00:00:00 <class 'datetime.datetime'>
A9 2023-02-14 00:00:00 <class 'datetime.datetime'>
A10 2023-02-14 00:00:00 <class 'datetime.datetime'>
日付の表示形式が設定されていれば、基本的には、datetime.datetimeとして扱うのがOpenPyXLの仕様です。
ただし、この判定は万能というわけではなく間違ってintと判定される場合もありますから、注意が必要です。
最終更新日時:2023-05-08 11:38
Home » Python » OpenPyXLの使い方 » OpenPyXLで日付書式のセルはdatetime.datetimeとして扱われる