Python处理Word自动化排版的核心库是python-docx先完成环境安装12# 安装python-docx库仅支持.docx格式不支持老旧.doc格式pipinstallpython-docxpython-docx的核心能力控制字体、字号、颜色、加粗/斜体等字符样式调整段落间距、对齐方式、缩进等段落格式美化表格边框、对齐、单元格合并设置页眉页脚、页码、文档布局页边距、纸张大小。二、Word自动化排版完整流程实战案例以“员工手册.docx”为例原始文档为无格式的纯文本按“基础样式→段落排版→表格美化→页面布局→页眉页脚”的逻辑完成自动化排版。步骤1加载Word文档并初始化基础设置先读取原始文档配置全局字体解决中文显示问题为后续排版打下基础123456789101112131415161718fromdocximportDocumentfromdocx.sharedimportPt, Inches, RGBColorfromdocx.enum.textimportWD_PARAGRAPH_ALIGNMENTfromdocx.enum.tableimportWD_TABLE_ALIGNMENTfromdocx.oxml.nsimportqn# 1. 加载原始Word文档或创建新文档doc Document()docDocument(员工手册_原始.docx)# 2. 设置文档全局字体关键解决中文显示异常# 全局默认样式微软雅黑、小四12磅、黑色normal_styledoc.styles[Normal]normal_style.font.name微软雅黑# 西文字体normal_style._element.rPr.rFonts.set(qn(w:eastAsia),微软雅黑)# 中文字体normal_style.font.sizePt(12)normal_style.font.color.rgbRGBColor(0,0,0)# 黑色print(文档加载并完成全局字体初始化)步骤2字符样式自动化排版字体、字号、颜色针对标题、正文、强调文本等不同字符类型批量设置统一样式替代手动选中文本调整格式12345678910111213141516171819202122232425262728293031323334353637383940414243# 定义样式配置函数复用性更高defset_char_style(run, font_name微软雅黑, font_size12, boldFalse, italicFalse, colorRGBColor(0,0,0)):配置字符样式:param run: 字符运行对象docx.text.run.Run:param font_name: 字体名称:param font_size: 字号磅:param bold: 是否加粗:param italic: 是否斜体:param color: 字体颜色RGBColorrun.font.namefont_namerun._element.rPr.rFonts.set(qn(w:eastAsia), font_name)run.font.sizePt(font_size)run.font.boldboldrun.font.italicitalicrun.font.color.rgbcolor# 1. 批量设置标题样式文档中前3个段落为一级/二级/三级标题# 一级标题二号字、加粗、居中、深蓝色title1doc.paragraphs[0].runs[0]set_char_style(title1, font_size22, boldTrue, colorRGBColor(0,51,102))doc.paragraphs[0].alignmentWD_PARAGRAPH_ALIGNMENT.CENTER# 二级标题小三号字、加粗、左对齐、深蓝色title2doc.paragraphs[1].runs[0]set_char_style(title2, font_size15, boldTrue, colorRGBColor(0,51,102))doc.paragraphs[1].alignmentWD_PARAGRAPH_ALIGNMENT.LEFT# 三级标题小四号字、加粗、左对齐、深灰色title3doc.paragraphs[2].runs[0]set_char_style(title3, font_size12, boldTrue, colorRGBColor(51,51,51))doc.paragraphs[2].alignmentWD_PARAGRAPH_ALIGNMENT.LEFT# 2. 批量设置正文强调文本如“注意”“警告”标红加粗forparaindoc.paragraphs:forruninpara.runs:if注意inrun.text:set_char_style(run, boldTrue, colorRGBColor(255,0,0))elif警告inrun.text:set_char_style(run, boldTrue, colorRGBColor(255,102,0))print(字符样式排版完成)步骤3段落格式自动化排版间距、缩进、对齐调整段落的行间距、段前段后间距、首行缩进等解决手动调整段落格式的繁琐1234567891011121314151617181920212223242526272829303132333435# 定义段落样式配置函数defset_para_style(para, line_spacing1.5, space_before0, space_after5, indent2):配置段落样式:param para: 段落对象docx.text.paragraph.Paragraph:param line_spacing: 行间距倍:param space_before: 段前间距磅:param space_after: 段后间距磅:param indent: 首行缩进字符数# 行间距para.paragraph_format.line_spacingline_spacing# 段前/段后间距磅para.paragraph_format.space_beforePt(space_before)para.paragraph_format.space_afterPt(space_after)# 首行缩进2字符需转换为磅1字符≈12磅para.paragraph_format.first_line_indentPt(indent*12)# 1. 批量设置正文段落格式跳过前3个标题段落fori, parainenumerate(doc.paragraphs):ifi 3:# 标题段落已单独设置仅处理正文set_para_style(para,line_spacing1.5,# 1.5倍行间距space_before0,# 段前0磅space_after5,# 段后5磅indent2# 首行缩进2字符)# 2. 单独调整标题段落的间距doc.paragraphs[0].paragraph_format.space_afterPt(15)# 一级标题段后15磅doc.paragraphs[1].paragraph_format.space_afterPt(10)# 二级标题段后10磅doc.paragraphs[2].paragraph_format.space_afterPt(8)# 三级标题段后8磅print(段落格式排版完成)步骤4表格自动化美化边框、对齐、单元格格式Word中的表格常需手动调整边框、单元格对齐、列宽通过代码批量美化1234567891011121314151617181920212223242526# 遍历文档中所有表格统一美化fortableindoc.tables:# 1. 表格整体样式居中对齐、显示边框table.alignmentWD_TABLE_ALIGNMENT.CENTERtable.styleTable Grid# 显示完整边框内置样式# 2. 设置表头样式第一行forcellintable.rows[0].cells:# 表头文字加粗、居中、浅蓝色背景forparaincell.paragraphs:para.alignmentWD_PARAGRAPH_ALIGNMENT.CENTERforruninpara.runs:set_char_style(run, boldTrue, colorRGBColor(0,51,102))# 单元格背景色浅蓝色cell.fill.color.rgbRGBColor(230,243,255)# 3. 设置正文行样式文字居中、调整列宽forrowintable.rows[1:]:fori, cellinenumerate(row.cells):# 单元格文字居中forparaincell.paragraphs:para.alignmentWD_PARAGRAPH_ALIGNMENT.CENTER# 按列调整宽度第1列2英寸其余1.5英寸cell.widthInches(2)ifi0elseInches(1.5)print(表格美化完成)步骤5页面布局与页眉页脚自动化设置配置页边距、纸张大小、页码、页眉等页面级格式替代手动调整“页面布局”和“插入页眉页脚”1234567891011121314151617181920212223242526272829303132333435fromdocx.enum.sectionimportWD_ORIENTATIONfromdocx.enum.textimportWD_ALIGN_PARAGRAPH# 1. 设置页面布局A4纸张、页边距sectiondoc.sections[0]section.page_widthInches(8.27)# A4宽度section.page_heightInches(11.69)# A4高度# 设置页边距上2.54cm下2.54cm左3cm右2.5cmsection.top_marginInches(1)# 1英寸≈2.54cmsection.bottom_marginInches(1)section.left_marginInches(1.18)section.right_marginInches(0.98)# 2. 设置页眉文档名称分隔线headersection.headerheader_paraheader.paragraphs[0]header_para.textXX公司员工手册 - 标准化文档header_para.alignmentWD_PARAGRAPH_ALIGNMENT.CENTER# 页眉文字样式小五号字、灰色forruninheader_para.runs:set_char_style(run, font_size10.5, colorRGBColor(102,102,102))# 3. 设置页脚页码日期footersection.footer# 页码段落居中footer_para1footer.paragraphs[0]footer_para1.text第 {PAGE} 页共 {NUMPAGES} 页footer_para1.alignmentWD_PARAGRAPH_ALIGNMENT.CENTER# 日期段落右对齐footer_para2footer.add_paragraph(2025年01月01日)footer_para2.alignmentWD_PARAGRAPH_ALIGNMENT.RIGHTforruninfooter_para2.runs:set_char_style(run, font_size10.5)print(页面布局与页眉页脚设置完成)步骤6保存排版后的文档123# 保存排版后的文档doc.save(员工手册_排版完成.docx)print(Word文档自动化排版完成已保存为「员工手册_排版完成.docx」)三、高频排版场景拓展场景1批量排版多份Word文档若有多个同类型文档如各部门的报告可遍历文件夹批量应用排版规则12345678910111213141516171819202122232425importos# 定义排版函数复用上述所有逻辑defformat_word(file_path, output_path):docDocument(file_path)# 1. 全局字体设置省略同步骤1# 2. 字符样式设置省略同步骤2# 3. 段落格式设置省略同步骤3# 4. 表格美化省略同步骤4# 5. 页面布局省略同步骤5doc.save(output_path)# 遍历文件夹中的Word文档input_folder待排版文档output_folder排版完成文档ifnotos.path.exists(output_folder):os.mkdir(output_folder)forfile_nameinos.listdir(input_folder):iffile_name.endswith(.docx):input_pathos.path.join(input_folder, file_name)output_pathos.path.join(output_folder, file_name.replace(.docx,_排版完成.docx))format_word(input_path, output_path)print(多份Word文档批量排版完成)场景2按模板批量生成并排版文档结合Excel数据源批量生成带标准化排版的Word文档如员工通知书12345678910111213141516171819202122232425262728importpandas as pd# 读取Excel中的员工数据dfpd.read_excel(员工信息.xlsx)forindex, rowindf.iterrows():# 创建新文档docDocument()# 1. 设置全局字体normal_styledoc.styles[Normal]normal_style.font.name微软雅黑normal_style._element.rPr.rFonts.set(qn(w:eastAsia),微软雅黑)# 2. 添加标题并排版titledoc.add_heading(f{row[姓名]}的转正通知书, level0)title.alignmentWD_PARAGRAPH_ALIGNMENT.CENTERset_char_style(title.runs[0], font_size22, boldTrue)# 3. 添加正文并排版paradoc.add_paragraph(f尊敬的{row[姓名]}您于{row[入职日期]}入职现正式转正。)set_para_style(para, indent2)# 4. 添加表格并美化省略同步骤4# 5. 保存文档doc.save(f转正通知书_{row[姓名]}.docx)print(批量生成并排版Word文档完成)四、常见问题与解决方法1.中文字体显示异常必须同时设置font.name西文和eastAsia中文字体缺一不可12run.font.name微软雅黑run._element.rPr.rFonts.set(qn(w:eastAsia),微软雅黑)2.行间距设置无效line_spacing支持多种格式建议用“倍数”或固定值12para.paragraph_format.line_spacingPt(20)# 固定20磅行间距para.paragraph_format.line_spacing1.5# 1.5倍行间距3.表格边框不显示需指定内置表格样式而非仅设置单元格边框1table.styleTable Grid# 显示完整边框4.页码占位符不生效{PAGE}{NUMPAGES}是Word域代码需保存后在Word中更新域手动更新选中页码 → 右键 → 更新域自动更新可结合win32com库需额外安装pywin32。5.段落缩进计算错误1个中文字符≈12磅首行缩进2字符需设置为Pt(24)1para.paragraph_format.first_line_indentPt(2*12)