Home » Python » OpenPyXLの使い方 » OpenPyXLによるdatetime.datetime判定の不具合

OpenPyXLによるdatetime.datetime判定の不具合

動作検証バージョン:Windows 10 Pro(64-bit)+ Python 3.11.1(64-bit) + OpenPyXL 3.0.10

OpenPyXLでは基本的に、日付データがdatetime.datetimeと判定されることを記事にしました。

ですが、この日付判定は万能というわけではありません。

datetime.datetimeと判定されない例

下図のようなデータが

Cドライブtempフォルダーdate.xlsxブックの先頭シートに存在するときに、以下のスクリプトを実行してみます。

import openpyxl as xl

bk = xl.load_workbook(r'c:\temp\date.xlsx')
ws = bk.worksheets[0]

for cel in ws['A']:
    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判定の不具合

「OpenPyXLの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.