神Excelからの逃亡
モチベーション
弊社では業務報告書を用意されたテンプレートに沿って書くことになっている。このテンプレートは例の如くえらい結合が横行しているくそExcelだ。Excelは文書編集ソフトではない。表計算ソフトだ。MicrosoftはExcelでラベル以外の文字列を入力することを一切禁止して欲しい。この前耐えきれなくなり、pythonくんたぶんこういうの得意でしょってことでExcelを開かなくて済むようにした。
できること
- テンプレートに日付や名前、部署名あたりを入力するのを作成する日付から自動でやる
input.txt
から本文を拾ってきて該当するセルにぶち込む- 日付からファイル名とディレクトリがなければ作って保存する
コード
変数名とか酷いのは許してくれ
from datetime import date, timedelta import os import openpyxl INPUT_FILE_NAME = "input.txt" TEMPLATE_FILE_NAME = "Template.xlsx" NEW_FILE_DIR_NAME = "\\\\かいしゃのきょうゆうふぉるだ\\五十嵐" NEW_FILE_NAME_FORMAT = "{0}_{1}_{2}-{3}.xlsx" SHEET_NAME = "業務報告書" DATE_FORMAT = "{0}年 {1}月 {2}日( {3} )" NAME = "五十嵐響子" FIRSTNAME = "五十嵐" DEPARTMENT = "けんきゅうかいはつ" TYPE = "週報" # 今日の日付を取得 dt = date.today() year = dt.year month = dt.month day = dt.day week = "金" # 入力元テキストファイルの読み込み f = open(INPUT_FILE_NAME, 'r', encoding='UTF-8') s = f.read() f.close() contents = s.split("\n\n") # Excelファイルを開く wb = openpyxl.load_workbook(TEMPLATE_FILE_NAME) ws = wb[SHEET_NAME] # セルの編集 cell = ws["C3"] cell.value = DATE_FORMAT.format(year, month, day, week) cell = ws["C4"] cell.value = NAME cell = ws["C5"] cell.value = DEPARTMENT cell = ws["B8"] cell.value = contents[0] # 業務内容 cell = ws["B20"] cell.value = contents[1] # 反省 cell = ws["B32"] cell.value = contents[2] # 改善・提案 # 週の初めの日付を取得 first_day = dt - timedelta(days=4) f_year = first_day.year f_month = first_day.month f_day = first_day.day # 保存するファイル名を'週報_五十嵐_20210222-26.xlsx'みたいな感じで作って保存 tmp1 = str(f_year) + '{0:02}'.format(f_month) + '{0:02}'.format(f_day) if year == f_year: if month == f_month: tmp2 = str('{0:02}'.format(day)) else: tmp2 = str('{0:02}'.format(month)) + str('{0:02}'.format(day)) else: tmp2 = str(year) + str('{0:02}'.format(month)) + str('{0:02}'.format(day)) tmp_dir = "{0}_{1}_{2}".format(TYPE, FIRSTNAME, str(f_year) + '{0:02}'.format(f_month)) target_dir = NEW_FILE_DIR_NAME + tmp_dir if not os.path.exists(target_dir): os.makedirs(target_dir) wb.save(target_dir + "\\" + NEW_FILE_NAME_FORMAT.format(TYPE, FIRSTNAME, tmp1, tmp2))
曜日ってどこかから取って来れるのかな。金曜日休むことがあったらそのへん調べていじっておきたい。
感想
pythonくんのつよつよライブラリほんまにつよい。調べながらテキトーにちょちょいとやったら使えるものができる。仕事をサボりたいけど、自動化への労力もあまり支払いたくないという人間にぴったりだ。今後も気づいたら作っていくようにしたい。できれば今後後輩ができた時に渡しても馬鹿にされないクオリティで。
そのうちやりたいこと
週の終わりは作成した週報のパスをメールに貼りけて各位に送信するという儀式も存在する。上司に送るメールを自動化するのもちょっと怖いけど、vbsか〜って言いながら作ろうと調べてたらpythonくんはoutlookでメール送れるライブラリも存在することを知った。というかwin32com
使ったらOffice触らなくて済むようになるのでは?わいのOutlookくんなぜかメール受信するたびにフリーズするんよな、、、
月曜日にでも暇だったら作っておきたいね。
おわり