【openpyxl】日付⇔シリアル値[変換・取得方法を徹底解説]【Python初心者向け】
過去の自分エクセル内に書かれた日付を取得して、その翌日を割り出したい…。取得した日付をシリアル値に変換できたら実現できそうなんだけど、openpyxlでそんなことできるの?
今の自分なるほど…。では今回は、「openpyxlで取得した日付をシリアル値に変換する方法」をできるだけわかりやすく解説いたします。また、「シリアル値を日付に変換する方法」も紹介いたしますので、ぜひ最後まで読んでいってください。
スポンサードリンク 目次- openpyxlで取得した日付をシリアル値に変換する方法
- 全コード
- 実行結果
- 事前準備
- openpyxlのインストール方法
- 解説
- インポート
- シリアル値のベースを設定
- セルの日付を取得
- 取得した日付をシリアル値に変換
- シリアル値を日付に変換
- セルに出力
- うまく動作しない場合の対処法
- エラーが出る
- No such file or directory: ○○
- Permission denied: ○○
- Worksheet ○○ does not exist
- ○○ is not defined
- その他のエラー
- エラーが出る
- 最後に
openpyxlで取得した日付をシリアル値に変換する方法
「datetime」を使います。まずは全コードと実行結果をお見せします。解説は後ほど行います。
全コード少し長いですが、後ほど各ブロックに分けて解説いたしますので、ご安心ください。
import openpyxl from datetime import datetime, timedelta wb = openpyxl.load_workbook('C://Utatane/input.xlsx') ws = wb['Sheet1'] base_date = datetime(1899, 12, 30) #シリアル値のベースを設定 date = ws['A1'].value date_serial = (date - base_date).days #日付をシリアル値に変換 next_date_serial = date_serial + 1 next_date = base_date + timedelta(days = next_date_serial) #シリアル値を日付に変換 ws['A2'].value = next_date wb.save('C://Utatane/output.xlsx') base_date = datetime(1899, 12, 30) #シリアル値のベースを設定 date_serial = (date - base_date).days #日付をシリアル値に変換 next_date = base_date + timedelta(days = next_date_serial) #シリアル値を日付に変換 実行結果A1セルの日付を取得して、その翌日の日付をA2セルに出力した結果です。
事前準備- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。
【入門】openpyxlのインストール方法と使い方【Python初心者向け】この記事では、openpyxlのインストール方法を解説しております。また、openpyxlの使い方や、よくあるエラーの対処法もできるだけわかりやすく解説しておりますので、ぜひ最後まで読んでいってください。utataneblog760.com2024.05.05 解説※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポート import openpyxl from datetime import datetime, timedeltaコードの1・2行目にて、今回の処理に必要なライブラリをインポートしています。「ライブラリ」や「インポート」に関しては、インストールの記事をご参考ください。
今回はエクセル操作に必要な「openpyxl」の他に、日付の操作に必要な「datetime」をインポートしています。
シリアル値のベースを設定 base_date = datetime(1899, 12, 30) #シリアル値のベースを設定【実行後の「date」の中身】:1899-12-30 00:00:00
コードの7行目にて、シリアル値のベースとなる日付を設定しています。
【シリアル値とは?】シリアル値は、日付を数値に置き換えた表示形式のことです。エクセルのシリアル値は「1900年1月1日」が「1」で、この日が基準となります。「1900年1月2日」が「2」といった具合で、日付が進むにつれて数値が増えていきます。ちなみに「2024年10月15日」のシリアル値は「45680」となります。
エクセルのシリアル値は「1900年1月1日」が基準となりますが、Pythonのシリアル値は「1899年12月30日」が基準のため、7行目のような設定を入れて調整しています。
セルの日付を取得 date = ws['A1'].value【実行後の「date」の中身】:2024-10-15 00:00:00
コードの9行目にて、セル内の日付を取得しています。この段階では、日付が取得されて変数「date」に入るのですが、シリアル値が取得される場もがあります。シリアル値が取得された場合は、次項の変換を省略できます。
取得した日付をシリアル値に変換 date_serial = (date - base_date).days #日付をシリアル値に変換【実行後の「date_serial」の中身】:45580
コードの11行目にて、日付をシリアル値に変換しています。9行目で取得した日付(date)からベースの日付(base_date)を引くことによって、取得した日付のシリアル値を割り出しています。(取得された値が既にシリアル値だった場合は省略可)
このシリアル値に「+1」することで、翌日のシリアル値を算出できます(解説は割愛)
シリアル値を日付に変換 next_date = base_date + timedelta(days = next_date_serial) #シリアル値を日付に変換【実行後の「next_date」の中身】:2024-10-16 00:00:00
今度はシリアル値を日付に変換します。ベースの日付(base_date)と翌日のシリアル値(next_date_serial)を足すことで日付に変換できます。
しかしながら、ベースの日付は「1899-12-30 00:00:00」、翌日のシリアル値は「45581」となっており、「日付+シリアル値」ということで計算ができません(型違いのため)
そこで、「timedelta」を使って、翌日のシリアル値を日付に変換してから計算します。
セルに出力 ws['A2'].value = next_dateあとは任意のセル(今回はA2)セルに出力して完了です。
スポンサードリンクうまく動作しない場合の対処法
エラーが出る No such file or directory: ○○これは、読み込むファイルやフォルダが見つからないというエラーです。読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
[エラーの原因と対処法]No such file or directory: xxx[openpyxl]この記事を最後まで読んでいただくと、エラー「No such file or directory: xxx」の原因と対処法がわかります。対処法を実践してシステムを完成させましょう!utataneblog760.com2024.03.02 Permission denied: ○○操作しようとしているファイルにアクセスできないというエラーです。「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
[エラーの原因と対処法]Permission denied: xxx[openpyxl]この記事を最後まで読んでいただくと、エラー「Permission denied: xxx」の原因と対処法がわかります。原因は非常に単純なことです。今すぐ対処法を実践して再度システムを動かしましょう!utataneblog760.com2024.03.01 Worksheet ○○ does not exist「指定したシートがありません」というエラーです。指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
[エラーの原因と対処法]Worksheet xxx does not exist[openpyxl]この記事を最後まで読んでいただくと、エラー「Worksheet xxx does not exist」の原因と対処法がわかります。対処法を実践してシステムを完成させましょう!utataneblog760.com2024.03.04 ○○ is not defined今まで出てきていない変数などを処理しようとした時に出るエラーです。変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
[エラーの原因と対処法]xxx is not defined[Python]Name error: name xxx is not defined。このエラー、よく出ますよね。この記事では、「Name error: name xxx is not defined」の原因や対処法を解説しております。できるだけわかりやすく解説しておりますので、ぜひ最後まで読んでいってください。utataneblog760.com2024.02.29 その他のエラーその他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
スポンサードリンク最後に
openpyxlで日付をシリアル値に変換・取得する方法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
挫折しないでPythonを独学で学習する方法[初心者用ロードマップも]Pythonを独学で学習したいけど、途中で挫折しないか不安...。この記事は、そんなあなたにおすすめです。挫折しないでPythonを独学で学習する方法をロードマップにしました。できるだけわかりやすく解説しておりますので、一緒にがんばりましょう!utataneblog760.com2024.03.06最後までお読みいただき、ありがとうございました。がんばってください!