日付のシリアル値「43313」等を「2018/08/01」の様な形式に変換する方法について詳しくご説明します。また本日の日付、7日後の日付を取得する方法についても加えてご説明します。
スポンサーリンク
はじめに
【Sikuli】によってExcelから読み込んだ2018/08/01等の日付データを業務システム等に自動入力する際、「2018/08/01」ではなく「43313」の様にシリアル値で入力されることがあります。
Excel側のフォーマットを変更するという手もありますが、お客様から提供されたフォーマット等の理由でExcel側の変更は難しい場合もあると思います。
ここでは、日付のシリアル値をSikuli側のプログラム(Python)によって「2018/08/01」「2018-08-01」「20180801」「2018年08月01日」といった形式に変換する方法をご説明していきます。
![]() | Sikuli実践ガイド(日経BP Next ICT選書)【電子書籍】[ 大澤 文孝 ] 価格:1,080円 |

【Excel】日付シリアル値→日付形式「YYYY/MM/DD」変換
日付のシリアル値では、1900年1月1日を基準として何日経過しているかを示しています。
しかし、Excelの仕様で1900年2月29日が存在することになってしまっているため、Pythonでシリアル値を変換する場合注意が必要です。
①1900年1月1日=シリアル値1として表現
②本来存在しない1900年2月29日を省く
上記2点より、1900年1月1日にシリアル値を足して2を引くことでシリアル値をもとに「YYYY-MM-DD hh:mm:ss」形式で表示させることが可能です。
【コード例】
from datetime import datetime, timedelta
day = datetime(1900,1,1) + timedelta(days=シリアル値 – 2)
また、「YYYY/MM/DD」形式で表示させたい場合はstrftimeメソッドにて指定することができます。
【コード例】
day2 = day.strftime(“%Y/%m/%d”)
【Excel】日付シリアル値→日付形式「YYYY-MM-DD」変換
1900年1月1日にシリアル値を足して2を引くことでシリアル値をもとに「YYYY-MM-DD hh:mm:ss」形式で表示させることが可能です。
【コード例】
from datetime import datetime, timedelta
day = datetime(1900,1,1) + timedelta(days=シリアル値 – 2)
また、「YYYY-MM-DD」形式で表示させたい場合はstrftimeメソッドにて指定することができます。
【コード例】
day2 = day.strftime(“%Y-%m-%d”)
【Excel】日付シリアル値→日付形式「YYYYMMDD」変換
1900年1月1日にシリアル値を足して2を引くことでシリアル値をもとに「YYYY-MM-DD hh:mm:ss」形式で表示させることが可能です。
【コード例】
from datetime import datetime, timedelta
day = datetime(1900,1,1) + timedelta(days=シリアル値 – 2)
また、「YYYYMMDD」形式で表示させたい場合はstrftimeメソッドにて指定することができます。
【コード例】
day2 = day.strftime(“%Y%m%d”)
【Excel】日付シリアル値→日付形式「YYYY年MM月DD日」変換
1900年1月1日にシリアル値を足して2を引くことでシリアル値をもとに「YYYY-MM-DD hh:mm:ss」形式で表示させることが可能です。
【コード例】
from datetime import datetime, timedelta
day = datetime(1900,1,1) + timedelta(days=シリアル値 – 2)
また、「YYYY年MM月DD日」形式で表示させたい場合はstrftimeメソッドと文字列結合にて指定することができます。
【コード例】
day2 = day.strftime(“%Y”)+ u”年” + day.strftime(“%m”) + u”月” + day.strftime(“%d”) + u”日”
本日の日付を取得する方法
下記のコードにて本日の日付を取得することができます。
【コード例】
import datetime
today_date = datetime.date.today()
本日から7日後の日付を取得する方法
下記のコードにて本日から7日後の日付を取得することができます。
「days=」の後の数字を変更することで、5日後、10日後など任意に設定可能です。
【コード例】
import datetime
today_date = datetime.date.today()
sevendays = today_date + datetime.timedelta(days=7)
サンプルプログラム
ファイル選択画面を表示してエクセル(sample.xlsx)を読み込み、
下記入力フォームに入力することを実現します。
登録日=本日の日付、発生時刻=エクセルから読み込み、回答期限=本日の日付+7日後とします。
【サンプルプログラム】
注意すべき点は、11行目の「from datetime import datetime, timedelta」です。import文は上部に集めたいですが、3行目に記載すると正常に動作しません。
【実行結果】
スポンサーリンク