Home » Python » OpenPyXLの使い方 » OpenPyXLで日付書式のセルはdatetime.datetimeとして扱われる

OpenPyXLで日付書式のセルはdatetime.datetimeとして扱われる

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

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として用意しておきます。

その後、以下のスクリプトを実行してください。

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 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として扱われる

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

検索


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

.