# 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("変換終了しました")