OpenPyXLでは基本的に、日付データがdatetime.datetimeと判定されることを記事にしました。
ですが、この日付判定は万能というわけではありません。
datetime.datetimeと判定されない例
下図のようなデータが
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 2023-02-14 00:00:00 <class 'datetime.datetime'>
A2 44971 <class 'int'>
同じく「2023/2/14」が入力され「2月14日」と表示されている2つのセルですが、A2セルはdatetime.datetimeではなくintと判定されてしまっています。
datetime.datetime判定が異なる原因
この2つで何が違うかというと、表示形式の設定が微妙に異なるのです。
datetime.datetimeと判定されているA1セルは、[セルの書式設定]ダイアログボックス-[表示形式]タブの[分類]欄で「日付」を選択して[種類]欄で「3月14日」と表示されているタイプです。
一方intと判定されてしまったA2セルは、「ユーザー定義」で「m"月"d"日"」と設定されています。
念のためdatetime.datetimeと正しく判定されたA1セルの「ユーザー定義」がどう表示されるかを確認すると「m"月"d"日";@」となっています。
「m"月"d"日";@」の「;@」を削除して、再度先ほどのスクリプトを実行すると、A1セルもA2セル同様intと判定されてしまいます。
A1 44971 <class 'int'>
A2 44971 <class 'int'>
最終更新日時:2023-05-23 04:18
Home » Python » OpenPyXLの使い方 » OpenPyXLによるdatetime.datetime判定の不具合