编者的话(可以跳过):
在政府单位实习了一段时间,发现有很多资料需要制作,而且繁琐重复,第一时间就想到了python,因为在办公自动化这方面我只知道python,本着能偷懒就偷懒的原则,通过查阅资料整出一个小脚本然后用tkinter的ui组件写了一个界面方便除我之外的人使用,此软件涉及内部文件就不发布了。截图如下:
1、软件需求
需求如下:
当你有一大堆的word文档,然后这些word文档都有其固定格式,也许是一个表格,也许就是只有文字的普通文档,这些固定模式的文档我称之为模板。如果有10份模板,这些模板的填写内容大致相同,比如说文件的编号,年份,一些公司名称等。然后基本上就是机械的找位子复制改改格式循环往复然后时间就过去了,做了一堆无意义的事情。
所以核心功能:需要把自己想要填写的内容填写到模板的指定位置。
2、实现方式
2.1使用python-docx
有兴趣的可以深入学习一下python-docx,这里仅仅是实现需求。python-docx只能处理docx所以doc需要转为docx具体方法可以自行百度。
#coding=utf-8
from docx import Document
from docx.shared import Pt #磅数
from docx.oxml.ns import qn #chinese
#路径就是你文档所在的路径,word_name文档文件名称
document=Document(路径+'/'+word_name)
#old_text原先模板上的文字,new_text是将要替换的文字,document是需要处理的文档对象
def change_text(old_text, new_text,document):
#遍历文档内所有段落
all_paragraphs = document.paragraphs
for paragraph in all_paragraphs:
for run in paragraph.runs:
if old_text in run.text:
run.text = run.text.replace(old_text, new_text)
#遍历文档内所有表格
all_tables = document.tables
for table in all_tables:
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
for run in paragraph.runs:
#print '扫描-->'+run.text
if old_text in run.text:
#print run.text+'->'+new_text #+'-->'+chardet.detect(cell.text.encode())
run.text = run.text.replace(old_text, new_text)
这个替换程序是可以替换word文档内表格和非表格的内容且不会修改原模板的任何格式,填写好上面所给函数的参数然后在ide里运行一下,前提是事先在文档中要填写的位置写好要替换的内容,也就是old_text,如下所示:
到此文字替换的内容搞定。这下你可以根据自己的想法做一个软件方便自己和别人使用了。
注:转载请标明出处。