作ってみた
ネット銀行の明細を毎月Excelに転記しているのですが、自動化できないかとやってみました。
対象は住信SBIネット銀行とSBI新生銀行です。
どちらも、ネットから明細がcsvでダウンロードできます。
これをデスクトップに保存し、指定のExcelに差分を取得して追記します。
ここで、これらの明細は新しいものが上に来るので、転記先には行を挿入して書き込む必要があります。
フォーマットは住信SBIネット銀行とSBI新生銀行でほぼ同じなので、同じ処理で対応可能でした。
で作ってみたのが以下です。
from openpyxl import Workbook #pip install openpyxl from openpyxl import load_workbook import csv import glob WORKBOOK_NAME=r"G:\マイドライブ\銀行明細.xlsx" DESKTOP=r'C:\Users\とりてん\Desktop' # SBI # nyushukinmeisai_20241220.csv # 新生 # JPY_CH_20241220105525.csv def main(): # ワークブックの読み込み wb = load_workbook(WORKBOOK_NAME) meisai_csv={} files = glob.glob(DESKTOP+"/*.csv") for source_file in files: if "nyushukinmeisai" in source_file: meisai_csv["SBI"]=source_file elif "JPY_CH" in source_file: meisai_csv["新生"]=source_file #print(meisai_csv) START_ROW =2 for i in meisai_csv: print("【"+str(i)+"】Start") ws = wb[i] # ワークシートを指定 target_row=START_ROW while ws.cell(target_row,1).value ==None: target_row+=1 print("Target row : "+str(target_row)) #データがある行 if type(ws.cell(target_row,1).value)!= str: last_date_s=ws.cell(target_row,1).value.strftime('%Y/%m/%d') else: last_date_s=ws.cell(target_row,1).value last_value_s =str(ws.cell(target_row,5).value) print("【Last writen data】" +last_date_s+" / "+last_value_s) if i=="新生": with open(meisai_csv[i], encoding="utf_8") as source_file: csv_lst = list(csv.reader(source_file)) #print(lst) elif i=="SBI": with open(meisai_csv[i]) as source_file: csv_lst = list(csv.reader(source_file)) #print(lst) #転記されていないデータを探す data_count=1 while(True): if csv_lst[data_count][0] == last_date_s and csv_lst[data_count][5-1].replace(",", "")==last_value_s.replace(",", ""): print("Data count : "+str(data_count)) break data_count+=1 if data_count>=len(csv_lst)-1: print("【"+i+"】"+" : Not found last writen data") return # 行を追加 for i in range(data_count-1): ws.insert_rows(2) for i in range(data_count-1): for j in range(len(csv_lst[0])): if ws.cell(target_row+i, j+1).value == None: #書き込み先が空白なら書き込む ws.cell(target_row+i, j+1).value = csv_lst[i+1][j] else: print("ERROR: Data Exist!") return wb.save(WORKBOOK_NAME) print("*** End ***") main() input()
exe化
pyinstallerでexeファイルにします。
久しぶりに使ったら、アンチウィルスソフトに隔離される現象が発生しました。
対象ファイルを除外ファイルに指定することで対処できます。
qiita.com
まとめ
これで毎月の定型業務が自動化できました。
さらに、これをpyinstallerでexe化しておくことで1クリックで実行できます。