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

うちの職場はとてもアナログなので、文書、かなり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)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です