いつも作る文書作成を省力化

うちの職場はとてもアナログなので、文書、かなりWordで作っています。 よくあるのが、学部長向けの文書で、日付とタイトル、本文が違うというもの。 これを作るときには、学部長の名前が入っている文書をコピーして名前を付けて、日付けと本文をいれて。。。という手順。 大したことないけど、今日はこれをタイトルと本文をクリップボードに入れておけば、自動で元文書のコピーを作成してくれるスクリプトを作ったという話。 普段の手順はこんな感じ

  1. 学部長名の入った文書をコピー
  2. ファイル名を変更
  3. ファイルを開いて、日付けとタイトル、本文を記入
  4. 印刷

大した手間ではないけど、1と2をエクスプローラーでやるの、意外とめんどう。 ファイル名は日付け件名というルールでいつも作っていて、これは本文に入れる日付とタイトルと同じなので、重複がある。 というわけで、今日作ったものはこんな感じ

  1. エディタで一行目件名、二行目以降本文を書いて、コピー
  2. ファイルを開いて印刷

ファイルを開く時点では、すでにファイル名は日付け件名になっていて、ファイルには今日の日付け、タイトル、本文が記入されている。 体裁を整えたければ、ファイル開いてやればいい。 日付けをマクロで自動アップデートするようにすることもできるけど、あとで修正するときに作成日のままにしておきたいとかあるので、マクロにしてしまうとちょっとめんどうなこともあるんですよね。 作成日を入れるようにすればいいのだろうけど。。。 今回の件ではじめてPythonを勉強したけど、まだRubyと比べてどうかというのはわからないなあ。。。 でも、はじめてPythonでなにかをするプログラムを書いたのに、2時間ほどでできた。 おかげで、次に何かあったら、またスクリプト書こうって気になったし、よかった。 ちなみに参考にした本は、「退屈なことはpythonにやらせよう」でした。 なかなかいい本で、Pythonで ExcelやPDFをコントロールする話も詳しく書かれている。 この手の本はWebから情報をダウンロードする方法を解説するものが多いけど、手元のファイルを加工する方法を解説している本はとても貴重。 作ったプログラムはこんな感じ。 読み込むファイルの1行目に日付けを記入。タイトルは8行目に決め打ちです。 ここは自由にできるのかもしれないけど、まあとりあえず使えるし、全体をリファクタリングするのは少しおいてからでいいかなあ。。。

# -- coding: utf_8 --
# クリップボードにデータを保存
# 一行目 タイトル
# 二行目以降 本文

import shutil, os, re, sys
import datetime, docx, time
import pyperclip

date_pattern = re.compile(r”””^(.?)
(\d\d(0|1)\d(0|1|2|3)\d)
(.
?)
(\..*)$
“””,re.VERBOSE)

if len(sys.argv) < 2:
sys.exit()

oldfile = sys.argv[1]
if not os.path.exists(oldfile):
sys.exit()

mo = date_pattern.search(oldfile)
# Skip a file without date_pattern
if mo == None:
sys.exit()

# TODO: split filename
before_part = mo.group(1)
date_part = mo.group(2)
last_part = mo.group(6)

text = pyperclip.paste()
body = text.split(‘\r\n’)
theme_part=body[0]

# create MY date_pattern
# YYMMDD
filedate = datetime.datetime.now().strftime(‘%y%m%d’)
newfile = before_part+filedate+theme_part+last_part

# Check if newfile already exists.
if os.path.exists(newfile):
newfile = before_part+filedate+theme_part+datetime.datetime.now().strftime(‘%M%S’)+last_part

# Create Word file
print (‘Creating new file “{}” from “{}” …’.format(newfile, oldfile))

doc=docx.Document(oldfile)
today = datetime.datetime.now()
doc.paragraphs[0].text = str(today.year) +”年”+ str(today.month) +”月”+ str(today.day) +”日”
doc.paragraphs[8].text = theme_part
for i in range(1, len(body)):
doc.add_paragraph(body[i])
doc.save(newfile)