質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3480閲覧

python excelから抽出した時間のデータをdatetimeに格納したい

takumisato

総合スコア5

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/04/26 23:12

openpyxlを使ってexcelから時間データを抽出した際に時間がtimeモジュールに格納されます。
時間を加算減算する場合、datetimeモジュールに格納する必要があるとの情報を知りました。
そこで以下の方法のコードの書き方、もしくはさらにスマートな方法があればそれをご教授いただきたく思います。

1、エクセルから時間データを抽出する際に直接datetimeモジュールに格納するコードの書き方
2、エクセルから時間データを一度timeモジュールに格納し、その後datetimeモジュールに格納するコードの書き方
3、openpyxlに限らずエクセルから時間データを抽出し、加算減算するコードの書き方

*エクセルファイルの内容は変更できません。
*エクセル側の時間データには日時は入っていない、時間のデータのみ
*時間データは分を加算減算したい(日をまたぐ可能性あり)

読みずらいコードですいません。

python

1import datetime 2import time 3import openpyxl 4n = 0 5yakutoki1zen=0;yakutoki2zen=0;yakutoki3zen=0;yakutoki4zen=0;yakutoki5zen=0;yakutoki6zen=0;yakutoki7zen=0;yakutoki8zen=0; 6import_file_path = "C:\\Users\satout\Desktop\タコグラフ_8月.xlsx"################################### 7excel_sheet_name = "4"############################################################################## 8except_file_path = "C:\\Users\satout\Documents\docker-python\excelnooutput"################################ 9book = openpyxl.load_workbook(import_file_path,read_only=True, data_only=True) 10sheet = book[excel_sheet_name] 11taikininzu=sheet["IS17"].value 12 13yakutoki1zen = sheet["EW143"].value;yakutoki1kou = sheet["FR143"].value 14if not yakutoki1zen:pass 15else: 16 yakutoki2zen = sheet["EW145"].value;yakutoki2kou = sheet["FR145"].value 17 n=n+1 18 y272287 = 1 19if yakutoki2zen: 20 yakutoki3zen = sheet["EW147"].value;yakutoki3kou = sheet["FR147"].value 21 n=n+1 22if yakutoki3zen: 23 yakutoki4zen = sheet["EW149"].value;yakutoki4kou = sheet["FR149"].value 24 n=n+1 25if yakutoki4zen: 26 n=n+1 27 yakutoki5zen = sheet["EW151"].value;yakutoki5kou = sheet["FR151"].value 28if yakutoki5zen: 29 n=n+1 30 yakutoki6zen = sheet["EW153"].value;yakutoki6kou = sheet["FR153"].value 31if yakutoki6zen: 32 n=n+1 33 yakutoki7zen = sheet["EW155"].value;yakutoki7kou = sheet["FR155"].value 34if yakutoki7zen: 35 n=n+1 36 yakutoki8zen = sheet["EW157"].value;yakutoki8kou = sheet["FR157"].value 37if yakutoki8zen: 38 n=n+1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Excelファイルは変更できないとのことなので 2 がよいかと思います。

時刻のみのセルの値は time オブジェクト (datetime.time) として取得されます。日付時刻の加減算を行うためには日付と時刻の情報を持つ datetime オブジェクト (datetime.datetime) とする必要があります。datetime オブジェクトは時間差を表す timedelta (datetime.timedelta) オブジェクトとの加減算が可能です。

コード例を示します。何かしらの日付は決めておく必要があります。

python

1from datetime import datetime, date, timedelta 2from openpyxl import load_workbook 3 4wb = load_workbook('datetime.xlsx') 5ws = wb[wb.sheetnames[0]] 6value_time = ws.cell(2, 1).value 7print(value_time, type(value_time)) # 22:10:00 <class 'datetime.time'> 8 9base_date = date(2022, 4, 27) 10print(base_date, type(base_date)) # 2022-04-27 <class 'datetime.date'> 11 12value_datetime = datetime.combine(base_date, value_time) 13print(value_datetime, type(value_datetime)) # 2022-04-27 22:10:00 <class 'datetime.datetime'> 14 15difftime = timedelta(hours=3, minutes=55, seconds=20) 16print(difftime, type(difftime)) # 3:55:20 <class 'datetime.timedelta'> 17 18print(value_datetime + difftime) # 2022-04-28 02:05:20

なお、Excelのセルで日付情報と時刻の情報の両者がある場合には、セルの値が datetime オブジェクトとして取得されるので、このような変換は不要です。

投稿2022/04/27 02:13

chirimen

総合スコア189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takumisato

2022/04/27 07:57

ありがとうございます。実行できました!助かりました!また機会がありましたらよろしくお願いします!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問