pip install mojimoji
# PythonによるWordファイルの自動作成とWordファイルの自動書式設定
# 「日報」用の文書ファイルをまとめて作成
# 必要なモジュールを呼び出す
import docx
from datetime import datetime, date, timedelta
import mojimoji
# 曜日の日本語変換辞書を設定する
youdic = {'Mon':'月', 'Tue':'火','Wed':'水','Thu':'木','Fri':'金','Sat':'土','Sun':'日'}
# 「日報」を作る最初の日「hiduke」を入力する
hiduke = '0'
while len(hiduke) != 8:
hiduke = input('「日報」を作る最初の年月日を数字8桁で入力してください yyyymmdd 形式 :') # 20220725
# 「日報」を作る最初の日を「date0」とする
nen = int(hiduke[0:4]) # '2022'
tuki = int(hiduke[4:6]) # '07'
hi = int(hiduke[6:]) # '25'
date0 = date(nen,tuki,hi) # 2022-07-25
# 「日報」を作る日数「n」を入力する
n = 0
while (n < 1 or n > 31):
n = int(input('「日報」を作る日数を数字1~31で入力してください :'))
# 土日の「日報」を作るか選択肢を入力し「d」にセットする
d = 0
while (d < 1 or d > 4):
d = int(input('土日の「日報」を作りますか? 土日とも作らない=1、土曜のみ作る=2、日曜のみ作る=3、土日とも作る=4 :'))
# 以下の作業をn回繰り返す
for i in range(n):
# 最初の日「date0」に i 日( 0 ~ n-1 日)加算した日を「date1」とする
date1 = date0 + timedelta(days=i)
# 「date1」について「日報」に利用する様々な日付を作成する
nen = date1.year # 年(半角数値) 2022
nenstr = str(nen) # 年(半角文字) '2022'
nenzen = mojimoji.han_to_zen(nenstr) # 年(全角文字) '2022'
tuki = date1.month # 月(半角数値) 7
tukistr = str(tuki) # 月(半角文字) '7'
tukizen = mojimoji.han_to_zen(tukistr) # 月(全角文字) '7'
hi = date1.day # 日(半角数値) 25
histr = str(hi) # 日(半角文字) '25'
hizen = mojimoji.han_to_zen(histr) # 日(全角文字) '25
you = date1.strftime('%a') # 曜日(英語略表記) 'Wed'
date2 = str(date1.strftime('%Y%m%d')) # 日付(yyyymmdd形式 半角文字) '20220725'
date3 = nenstr+'/'+tukistr+'/'+histr # 日付(yyyy/m/d形式 半角文字) '2022/7/25'
date4 = nenzen+'年'+tukizen+'月'+hizen+'日' # 日付(yyyy年m月d日形式 全角文字) '2022年7月25日'
date5 = '('+youdic[you]+')' # 曜日(日本語表記カッコ付) '(月)'
# 元になる文書ファイル(ひな形)を読み込み、「doc」に格納する
path = r'C:\Users\......\......\......\......\......\日報yyyymmdd.docx'
doc = docx.Document(path)
# 日報を作る曜日の分岐処理を行う
if (you == 'Mon' or you == 'Tue' or you == 'Wed' or you == 'Thu' or you == 'Fri')\
or (you == 'Sat' and (d == 2 or d == 4))\
or (you == 'Sun' and (d == 3 or d == 4)):
# 1つ目の表の2行目の1列目の1段落目のテキストを「par1」に格納する
par1 = doc.tables[0].rows[1].cells[0].paragraphs[0]
# 「par1」にある'Y年M月D日()'というテキストを実際に使用する日付・曜日に書き換える
par1.text = par1.text.replace('Y年M月D日()',date4+date5)
# 文書ファイルの新規作成
path = path.replace('yyyymmdd',date2)
doc.save(path)
print('パス '+path+' で新規にファイルを保存しました')
「日報」を作る最初の年月日を数字8桁で入力してください yyyymmdd 形式 : 20220725
「日報」を作る日数を数字1~31で入力してください : 10
土日の「日報」を作りますか? 土日とも作らない=1、土曜のみ作る=2、日曜のみ作る=3、土日とも作る=4 : 1
パス C:\Users\......\......\......\......\......\日報20220725.docx で新規にファイルを保存しました
パス C:\Users\......\......\......\......\......\日報20220726.docx で新規にファイルを保存しました
パス C:\Users\......\......\......\......\......\日報20220727.docx で新規にファイルを保存しました
パス C:\Users\......\......\......\......\......\日報20220728.docx で新規にファイルを保存しました
パス C:\Users\......\......\......\......\......\日報20220729.docx で新規にファイルを保存しました
パス C:\Users\......\......\......\......\......\日報20220801.docx で新規にファイルを保存しました
パス C:\Users\......\......\......\......\......\日報20220802.docx で新規にファイルを保存しました
パス C:\Users\......\......\......\......\......\日報20220803.docx で新規にファイルを保存しました
# PythonによるWordファイルの自動作成とWordファイルの自動書式設定
# Webサイトからコピーした文書の自動書式設定
# 必要なモジュールを呼び出す
import os
import docx
from docx import Document
from docx.shared import Inches, Pt
from docx.enum.text import WD_LINE_SPACING
from docx.shared import RGBColor
from docx.oxml.ns import qn
# 色のRGB値を「rgblist」にリスト化する
rgblist = [[255,0,0],[0,0,255],[0,128,0]] # 赤,青,緑
# ファイルがあるディレクトリ「dir」を指定する
dir = r'C:\Users\......\......\......\......\......'
# 書式設定したい文書ファイルの日付を入力する
hiduke = '0'
while len(hiduke) != 8:
hiduke = input('書式設定したい文書ファイルの年月日を数字8桁で入力してください yyyymmdd 形式 :')
# 書式設定したい文書ファイルの名称「nam」とパス「path」を生成する
nam = 'Web情報'+hiduke+'.docx'
path = os.path.join(dir,nam)
# 指定日付の文書ファイルを読み込む
doc = docx.Document(path)
# 文書全体の書式を一括変更する
# 段落前後の間隔を Pt値 で指定する
bpt = 0 # 段落前の Pt値
apt = 0 # 段落後の Pt値
for paragraph in doc.paragraphs:
paragraph.paragraph_format.space_before = Pt(bpt)
paragraph.paragraph_format.space_after = Pt(apt)
# 行間を指定する
for paragraph in doc.paragraphs:
paragraph.paragraph_format.line_spacing_rule = WD_LINE_SPACING.SINGLE # 1行
#paragraph.paragraph_format.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE # 1.5行
#paragraph.paragraph_format.line_spacing_rule = WD_LINE_SPACING.MULTIPLE # 倍数
#paragraph.paragraph_format.line_spacing_rule = WD_LINE_SPACING.AT_LEAST # 最小値
# 特定の語句を書式設定(色付け、太字)する
[cr,cg,cb] = rgblist[1] # 青
goku = '〇〇建設' # 「語句」を「goku」に格納する
n = len(goku) # 「語句」の文字数を「n」に格納する
for paragraph in doc.paragraphs:
c = paragraph.text.count(goku) # paragraphに含まれる「語句」の数を「c」に格納する
if c > 0:
p = paragraph.text # paragraphの内容を「p」に格納する
paragraph.text = '' # paragraphをいったん空文字列にする
# 以下の作業を c回繰り返す
for v in range(c):
i = p.find(goku) # 「p」に含まれる最初の「語句」の位置を「i」に格納する
p0 = p[:i] # 「p」で最初に現れる「語句」の前の部分を「p0」に切り分ける
p1 = p[i:i+n] # 「p」で最初に現れる「語句」を「p1」に切り分ける
p2 = p[i+n:] # 「p」で最初に現れる「語句」の後の部分を「p2」に切り分ける
paragraph.add_run(p0) # 「p0」をrunとしてparagraphに書き加える
r1 = paragraph.add_run(p1) # 「p1」をrunとしてparagraphに書き加え、書式設定のため「r1」とする
r1.font.color.rgb = RGBColor(cr,cg,cb) # 「r1」(=「p1」=「語句」)に色付けする
r1.bold = True # 「r1」(=「p1」=「語句」)を太字にする
p = p2 # 更に「p2」に含まれる「語句」を切り分けるため、「p2」を「p」として for~文によるループ内の先頭に戻す
paragraph.add_run(p2) # 最後まで残った(=これ以上「語句」を含まない)「p2」をrunとしてparagraphに書き加える
# 見出し・小見出しに下線を引いて色付けする
[cr,cg,cb] = rgblist[0] # 赤
for paragraph in doc.paragraphs:
if paragraph.text.find('。') == -1:
for run in paragraph.runs:
run.font.color.rgb = RGBColor(cr,cg,cb)
run.bold = False # 太字
run.underline = True #下線
run.italic = False # 斜体
# 日本語フォント名「fn」とフォントサイズ「fs」を指定する
fn = 'MS 明朝' # 'MS 明朝','MS ゴシック','MS P明朝',’MS Pゴシック',…など
fs = 11
for paragraph in doc.paragraphs:
for run in paragraph.runs:
run.font.name = fn
run._element.rPr.rFonts.set(qn('w:eastAsia'),run.font.name)
run.font.size = docx.shared.Pt(fs)
# 文書ファイルの上書き保存
doc.save(path)
print('パス '+path+' に上書き保存しました')
書式設定したい文書ファイルの年月日を数字8桁で入力してください yyyymmdd 形式 : 20220809
パス C:\Users\......\......\......\......\.....\Web情報20220809.docx に上書き保存しました