做过行政管理的小伙伴们一定遇到过统一设置Word格式的问题吧!小李作为办公室人员需要收集所有人员的个人现实表现材料和工作小结,可是上报材料对字体、字号、页边距、行距等全部做了严格统一要求几十个文档需要挨个检查是否按要求设置,于是一个一个的打开——修改——设置——检查——保存,抽空还吐槽修改起来太费劲了,稍微不注意就会漏项。于是就帮他写了下面一段代码。它不仅能统一字体字号,边页边距和行距都设置得明明白白。from pathlib import Pathfrom docx import Documentfrom docx.shared import Cm, Ptfrom docx.enum.text import WD_ALIGN_PARAGRAPH# ========== 参数设置 ==========one_font = "方正小标宋简体" # 标题字体one_size = 22 # 标题字号body_font = "仿宋_GB2312" # 正文字体body_size = 16 # 正文字号line_spacing = 28 # 行距 top_num = 3.2 # 上边距bottom_num = 2.6 # 下边距left_num = 2.7 # 左边距right_num = 2.7 # 右边距# ==============================def process_docx(path): doc = Document(path) for s in doc.sections: # 获取各页面设置区域 s.page_height, s.page_width = Cm(29.7), Cm(21) # 纸张大小 s.top_margin, s.bottom_margin = Cm(top_num), Cm(bottom_num) # 上边距、下边距 s.left_margin, s.right_margin = Cm(left_num), Cm(right_num) # 左边距、右边距 paras = [p for p in doc.paragraphs if p.text.strip()] if paras: p1 = paras[0] # 题目设置 p1.alignment = WD_ALIGN_PARAGRAPH.CENTER p1.paragraph_format.line_spacing = Pt(line_spacing) for r in p1.runs: r.font.name, r.font.size = one_font, Pt(one_size) for p in paras[1:]: #正文设置 p.paragraph_format.line_spacing = Pt(line_spacing) for r in p.runs: r.font.name, r.font.size = body_font, Pt(body_size) doc.save(path)if __name__ == "__main__": folder = Path(r'D:\上报材料') # 文档路径 docx_list = list(folder.glob("*.docx")) for docx in docx_list: process_docx(docx) print(f"已完成,共修改{len(docx_list)}个文档!")
one_font = "方正小标宋简体" # 标题字体one_size = 22 # 标题字号body_font = "仿宋_GB2312" # 正文字体body_size = 16 # 正文字号line_spacing = 28 # 行距 top_num = 3.2 # 上边距bottom_num = 2.6 # 下边距left_num = 2.7 # 左边距right_num = 2.7 # 右边距
这部分是参数设置,可根据现实需求进行修改。22字号约等同于二号字、16字号约等同于三号字。行距的单位为磅,边距的单位为厘米。二、自定义函数process_docx(path)这个函数负责一个一个打开文档,然后修改格式,最后保存文档。1、页面设置。for s in doc.sections:用于页面设置,包括纸张大小、上下左右边距。2、清洗空白段落。[p for p in doc.paragraphs if p.text.strip()]这个列表推导式是获取所有段落。if paras:自动跳过文档中的空白行,避免程序出错。3、标题格式化。p1 = paras[0]是第一段,p1.alignment设置对齐方式,p1.paragraph_format.line_spacing设置行距,r.font.name, r.font.size = one_font, Pt(one_size)设置字体和字号大小。4、正文格式化。从第二段开始,所有正文统一字体、字号、行距、格式完全统一。5、保存文档。doc.save(path)直接覆盖原文档,格式完成后自动保存,不用手动保存。运行前最后备份一份,或另存为其他名称,万一参数设置不合适不能恢复,不过这段代码只修改格式不修改文本内容,风险很少。if __name__ == "__main__": folder = Path(r'D:\上报材料') # 文档路径 docx_list = list(folder.glob("*.docx")) for docx in docx_list: process(docx) print(f"已完成,共修改{len(docx_list)}个文档!")
list(folder.glob("*.docx"))可自动找到路径文件夹下所有的docx文档。在这里你只需要修改文档所在文件夹,代码会自动扫描出所有的Word。最后运行完成后会提示:就是这一段小而实用的代码,解决大量繁琐的办公操作,让你在周末不加班或不加班,让自己有更多的自由时间。当然,你还可以使用tkinter做成带界面的小程序:如果你也经常和Word文档打交道,这个代码可以直接拿去用。如果这篇文章对你有所帮助,还请点赞+转发+收藏,说不定哪天你或许能用得上~~~