<追記情報>
https://teratail.com/questions/228031
に全文表記がありますので確認いただければ幸いです。
初心者ですので不足なコード、記載ミスなどありましたらお教えください。
前提・実現したいこと
・入退出管理システムを作っています
・入室のみのログ、退出のみのログはとれるようになりました
・このままだと二つのログを合わせて計算しないといけません
なのでpython+openpyxlで次のようなことを行いたいです
・入室ログと退出ログを合わせたものを作りたいです。具体的には以下の通り
*入室時に入室時間と社員番号を入れる
*退出時に社員番号が一致し、かつセルが空白であるとき退出時間と社員番号を入れる(セルが空白でない=ほかの人が入れているため)
(一致しない場合やほかの人が入れてしまっていてかぶっている場合はエラーリストに入れておく)
発生している問題・エラーメッセージ
・一致していない扱いなのか退出記録が記録されません。
if と and であっていると思うのですが…
エラーメッセージが出ないので見当のつけようもありません。
該当のソースコード
呼び出される側のコード
python
1def Out_Excelwrite(Status,EmpNum): 2 #Excelファイルを開く 3 Outwb = openpyxl.load_workbook(r"C:\python\tkinter\Out_LogList.xlsx") 4 Outws = Outwb["OUT_LIST"] 5 6 #最終行取得など 7 MaxLow = Outwb["OUT_LIST"].max_row 8 #各種データ 9 d_now = str(format(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))) 10 print(EmpNum,d_now,Status) 11 12 ##ここからメインファイル用 13 #メインのExcelファイルを開く 14 Mainwb = openpyxl.load_workbook(r"C:\python\tkinter\Main_LogList.xlsx") 15 Mainws = Mainwb["MAIN_LIST"] 16 17 MainMaxLow = Mainwb["MAIN_LIST"].max_row 18 #メインにデータを入れる ここ違う 19 for row_num in range(2,Mainws.max_row): 20 ID = Mainws.cell(row = row_num , column = 1).value 21 if str(ID) in EmpNum and Mainws.cell(row = row_num , column = 4).value == "": 22 Mainws.cell(row = row_num , column = 4 ,value = EmpNum) 23 Mainws.cell(row = row_num , column = 5 ,value = d_now) 24 Mainws.cell(row = row_num , column = 6 ,value = Status) 25 print("ALLRIGHT") 26 27 #保存する 28 Mainwb.save(r"C:\python\tkinter\Main_LogList.xlsx") 29 30 #処理完了 31 print("処理が完了しました")
呼び出す側のコード
python
1OutEnter = tk.Label(root,text = "退勤",font=("25","40"),bg="green") 2OutEnter.place(x=400,y=175) 3OutEnter.bind("<Button-1>", OutWork) 4 5def OutWork(event): 6 Status = "退勤" 7 EmpNum = Number.get() 8 EmpNum_Count = len(EmpNum) 9 if EmpNum_Count == 4: 10 d_now = str(format(datetime.now().strftime("%Y/%m/%d"))) 11 t_now = str(format(datetime.now().strftime("%H:%M:%S"))) 12 print(EmpNum,d_now,t_now,Status) 13 tkinter_Sub_Excel.Out_Excelwrite(Status,EmpNum) 14 Number.delete(0,tk.END) 15 res1 = str(format(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))) 16 res2 = "社員番号"+str(EmpNum)+"の"+Status+"を確認しました" 17 Check["text"] = res1 +"\n"+res2 18 def clear(): 19 Check["text"] = "" 20 root.after(2000,clear)
試したこと
処理終了時にALLRIGHTをprintさせるようにしたのですがprintされませんでした。
実行時は以下のように出ます
1101 2019/12/07 13:01:46 退勤
1101 2019/12/07 13:01:46 退勤
処理が完了しました
なのでここからメインファイル用以下が無視されている?状態です。
if str(ID)いかにこのelseを入れると
else:
print("Error")
結果は次の通りです。
Errorが複数回出ているのはfor文を抜けさせていないからだと思うのですが…
なぜif以下の処理をしてくれないのでしょうか…
1101 2019/12/07 13:12:05 退勤
1101 2019/12/07 13:12:06 退勤
Error
Error
Error
Error
処理が完了しました
補足情報(FW/ツールのバージョンなど)
python 3.8.0です

あなたの回答
tips
プレビュー