【Python 自動化辦公】專欄是介紹如何利用python辦公,減少工作負荷。篇幅精煉,內(nèi)容易懂,無論是否有編程基礎(chǔ),都非常適合。
在上次文章中,我們學(xué)習(xí)了【用python寫入excel】,這次我們學(xué)習(xí)Python寫word文檔吧!
場景:
有時候,辦公室需要按模版生成的固定的文件,模板是固定的,只是每次需要替換信息。如下圖的收入證明,模版中所有標黃的都是需要替換的信息:
如果手工來做這個事情,每次至少需要10分鐘的時間。假如每天要開15份,則至少要花2個半小時,而且手工編輯word很容易出錯。
可不可用python寫個程序,解決這個問題呢?
結(jié)論當然是肯定的!
0.摘要
本文大約需要15分鐘,建議在電腦上打開,邊閱讀邊操作。
- 安裝Python讀寫word模塊,python-docx
- 準備word模板,準備寫入word文檔內(nèi)容
- 編寫python代碼并運行
4.通過讀取excel表格中的信息,批量生成word文件
1.安裝python-docx模塊
與上篇文章類似,需要在cmd窗口輸入pip install python-docx
。
2.準備word模板,準備寫入word文檔內(nèi)容
word模板如上所示,(可以不需要標黃),這里注意,需要替換的文字或數(shù)字位置,用"XXXX"來固定替代。保存為個人收入證明.docx
。
名稱內(nèi)容姓名張三身份證號104111199009103531職務(wù)工程師工作年限10月收入10000大寫壹萬元整聯(lián)系人李四單位名稱格物致知股份有限公司單位地址珠海市橫琴新區(qū)寶華路6號105室-67425聯(lián)系電話0756-8627528
3. 編寫python代碼并運行
在word模板的同級目錄,新建一個writeword.py文件,用記事本或其他文本編輯工具打開。
編程思路:
- 用python打開對應(yīng)doc模板
- 按順序找到每一個需要替換的位置字符"XXXX",替換為對應(yīng)的內(nèi)容
- 另存為doc為另一個文件
在文本編輯工具中輸入如下代碼,保存并關(guān)閉。
from docx import Document
#準備寫入內(nèi)容
name="張三"
id_code="104111199009103531"
career="工程師"
working_years="10"
salary="10000"
salary_uppercase="壹萬元整"
contact="李四"
company="格物厚德股份有限公司"
address="珠海市橫琴新區(qū)寶華路6號105室-67425"
tel="0756-8627528"
#打開doc
textlist=[name,id_code,career,working_years,salary,salary_uppercase,company,address,contact,tel]
doc = Document("個人收入證明.docx")
count=0
for p in doc.paragraphs:
if 'XXXX' in p.text:
inline = p.runs
for i in range(len(inline)):
if 'XXXX' in inline[i].text:
text = inline[i].text.replace('XXXX', textlist[count])
inline[i].text = text
count+=1
print(count)
doc.save("%s_個人收入證明.docx"%name)
在同級目錄,打開cmd,運行writeword.py python writeword.py
生成結(jié)果如下:
張三_個人收入證明.docx
4.通過讀取excel表格中的信息,批量生成word文件
這里生成了對應(yīng)word文件,但也有幾個問題:
- 對應(yīng)的日期并沒有自動填寫,應(yīng)當填寫文件生成時對應(yīng)的日期
- 如果是生成大量同樣word文檔的話,目前的程序也需要一個一個改,并沒有提升太多效率
如果您看過我們之前的2篇用python讀寫excel的文章,您肯定就會想到,可以利用讀取excel表格里的內(nèi)容,批量生成對應(yīng)的word文檔。對,讓我們繼續(xù)吧!
這里再準備一個excel文件,將需要批量寫入的信息寫在excel中,并保存為income.xlsx在同級目錄,如下圖:
修改python 文件writeword.py
from docx import Document
#準備寫入內(nèi)容
import xlrd
import time
# 當前時間元組
from datetime import datetime
nt=datetime.now()
# 可以輸入中文年月日
datestr=nt.strftime('%Y{y}%m{m}%dqeskhnt').format(y='年', m='月', d='日')
xlsx=xlrd.open_workbook('income.xlsx')
sheet=xlsx.sheet_by_index(0)
for row in range(1,sheet.nrows):
doc = Document("個人收入證明.docx")
count=0
textlist=[]
for col in range(0,sheet.ncols):
textlist.append(str(sheet.cell_value(row, col)))
for p in doc.paragraphs:
if 'XXXX' in p.text:
inline = p.runs
for i in range(len(inline)):
if 'XXXX' in inline[i].text:
text = inline[i].text.replace('XXXX', textlist[count])
inline[i].text = text
count+=1
if 'X 年 X 月 X 日' in p.text:
inline = p.runs
for i in range(len(inline)):
if 'X 年 X 月 X 日' in inline[i].text:
text = inline[i].text.replace('X 年 X 月 X 日', datestr)
inline[i].text = text
doc.save("%s_個人收入證明.docx"%textlist[0])
運行后,輸入結(jié)果: