# application Useful as a reference for log
# version 1.00
# program by Kabayon
# data 20240306
# time :16:45
#ログ生成を関数ではなく「ベタ打ち」した例

#-------------------------------------------------------------
#ライブラリ設定
#-------------------------------------------------------------
import os
import xlwings as xw
import  openpyxl
from    openpyxl    import  load_workbook
import datetime

#処理開始時刻の記録
t_delta = datetime.timedelta(hours=9)
JST = datetime.timezone(t_delta, 'JST')
now = datetime.datetime.now(JST)
str_now = now.strftime('%Y/%m/%d %H:%M:%S')

#処理ログを記録するリストlists_logと一時ログリストlogの初期化
lists_log = []
log = []

#デスクトップのpathを得る
#対象EXCELファイルはデスクトップ上と既定したいため
desktop_dir_origin = os.path.expanduser('~/Desktop')
desktop_dir = desktop_dir_origin.replace("\\","/")
#print(desktop_dir)

#対象のワークブックファイルを追記モードで開けるかチェックする関数の【定義】
def xlsx_is_open(filepath: str) -> bool:
    try:
        f = open(filepath, 'a')
        f.close()
    except:
        return True
    else:
        return False

#対象ファイル名の設定(ファイル名の****は適宜修正のこと!)
name_excel_target = "*****.xlsx"
#対象ファイル(EXCEL)の中に設けたログ追記用シートの設定(ここでは"処理ログ"とした)
name_sheet_log = "処理ログ"

#対象ファイルのフルpath設定(■対象ファイルはDesktop上と既定)
path_excel_target = desktop_dir + "/" +  name_excel_target
#print(path_excel_target)
log = [path_excel_target,str_now]
lists_log.append(log)

#対象EXCELファイルが開いていたら強制保存し、EXCELを強制終了する
if xlsx_is_open(path_excel_target):
    print(name_excel_target," がすでに開かれています。")
    #開いているブックに接続
    wb = xw.books.active
    #開いているブックを上書き保存し、閉じる
    wb.save()
    wb.close()
    log = ["開かれていたブックを上書き保存し、閉じました",str_now]
    print(log)
    lists_log.append(log)
    #EXCEL強制終了
    xw.apps.cleanup()
    log = ["EXCEL を強制終了しました。",str_now]
    print(log)
    lists_log.append(log)
else:
    log = [name_excel_target+' はアクセス可能です。',str_now]
    print(log)
    lists_log.append(log)

#主要な処理

log = ["処理#####を開始します",str_now]
print(log)
lists_log.append(log)


#-------------------------------------------------------------
#処理ログをシートに書き出す
#-------------------------------------------------------------

sheet = wb[name_sheet_log]
for row in lists_log:
    sheet.append(row)

#-------------------------------------------------------------
#ワークブックを保存し、閉じる
#-------------------------------------------------------------

wb.save(name_wb)
wb.close()

print("変換終了しました")