前提
Python を用いて業務改善に取り組んでいます。
実現したいこと
各社員のタイムカードを集計し、一つのExcelファイルにシートを分けて書き込みを行いたいです。集計については完了しDataFrameまで出力できました。「◯月分出勤管理簿.xlsx」というファイルに、シート名を社員名として、集計したデータの書き込みを行いたいです。
発生している問題・エラーメッセージ
For文を用いて、社員毎にデータの集計を行っており、集計が終わると、[社員名]のシートを作成し、そこに書き込み、次の社員のデータ集計、シート作成、書き込みというふうにしたいのです。しかし、[社員名]というシートが追加されていくだけで、集計したデータの書き込みができません。以下にコードを添付します。
該当のソースコード
For文外の最初に下記のコードで◯月分出勤管理簿.xlsxを作成します。
Python
1import pandas as pd 2import openpyxl 3 4file_name=str(dt)+"月分出勤管理簿.xlsx"5#book作成6book = openpyxl.Workbook()7# 保存する8book.save(file_name)9 10browser = webdriver.Chrome()
そして、For文の最後に下記のコードでシートの追加・書き込み・保存を試みました
Python
1 df_xlsx=pd.DataFrame(data2)2 worker_name=browser.find_element_by_class_name('pagetitle').text.split(" ")[0]3 4 wb = openpyxl.load_workbook(file_name)5 wb.create_sheet(title=worker_name)6 7 #全レコードを'全体'シートに出力8 df_xlsx.to_excel(file_name, sheet_name =worker_name)9 10 11 #Excelファイルを保存12 wb.save(file_name)
この結果は変数worker_nameに格納された社員名のシートが追加されるのみで、[社員名]のシートにデータの書き込みが行われません。
試したこと
for文の最後のコードを以下のコードに書き換えたところ
df_noseyo_xlsx.to_excel(worker_name,index=False)
[社員名]というExcelファイルが社員人数分作成されます。
[追記]
wbを作成しているにも関わらず
df_xlsx.to_excel(file_name, sheet_name =worker_name)
の書き込みをしているのが間違いだと考えています。
ws=wb[worker_name]
でワークシートを作成し、書き込みを行えば良いのかとも考えましたが、
その場合、DataFrameのままでの書き込みの方法がわかりませんでした。
[追記]
wb = openpyxl.load_workbook(file_name) wb.create_sheet(title=worker_name) ws=wb[worker_name] ws=wb.active #全レコードを'全体'シートに出力 for row in data2: ws.append(row) #Excelファイルを保存 wb.save(file_name)
としたところ、ValueError: 日付 is not a valid column name とでました。
DataFrameは下記のようなものとなっています。
補足情報(FW/ツールのバージョンなど)
Python,JupyterLabを使用しています。
0 コメント