1. 为什么选择python-docx处理Word文档在日常办公中我们经常需要处理大量Word文档。无论是批量生成报告、合同还是统一修改格式手动操作不仅效率低下还容易出错。这时候python-docx就能大显身手了。python-docx是Python中专门用于操作Word文档的库。它最大的优势在于能够用代码自动化完成那些重复性工作。比如我最近接手一个项目需要为200多个客户生成个性化合同。如果手动操作至少要花3天时间。而用python-docx写个脚本不到1小时就搞定了。这个库特别适合以下场景需要批量生成格式统一的文档需要从数据库或其他数据源自动填充内容到Word需要定期更新大量文档中的特定内容需要确保文档格式完全一致与手动操作相比python-docx能确保每次生成的文档格式完全相同完全避免了人为失误。而且一旦写好脚本以后类似的工作都可以复用效率提升不是一点半点。2. 快速安装与环境配置2.1 安装python-docx库安装python-docx非常简单只需要一条pip命令pip install python-docx如果你在国内可以使用阿里云镜像加速安装pip install -i https://mirrors.aliyun.com/pypi/simple/ python-docx我建议使用虚拟环境来管理Python包这样可以避免不同项目间的依赖冲突。创建虚拟环境的命令是python -m venv docx_env source docx_env/bin/activate # Linux/Mac docx_env\Scripts\activate # Windows2.2 验证安装安装完成后可以写个简单的测试脚本验证是否安装成功from docx import Document doc Document() doc.add_paragraph(Hello, python-docx!) doc.save(test.docx)运行这个脚本后如果当前目录下生成了test.docx文件并且打开后能看到Hello, python-docx!这段文字就说明安装成功了。3. 创建和编辑Word文档3.1 创建新文档创建一个全新的Word文档非常简单from docx import Document doc Document() # 创建空白文档 doc.save(new_document.docx) # 保存文档这样就会在当前目录下生成一个名为new_document.docx的空白Word文档。3.2 添加标题和段落添加内容也很直观。比如要添加一个一级标题和几个段落from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 添加一级标题并居中 title doc.add_heading(年度工作报告, level1) title.alignment WD_PARAGRAPH_ALIGNMENT.CENTER # 添加正文段落 doc.add_paragraph(这是报告的第一部分内容。) doc.add_paragraph(这是报告的第二部分内容。)add_heading方法的level参数可以指定标题级别1是一级标题2是二级标题以此类推。3.3 格式化文本python-docx可以精细控制文本格式from docx.shared import Pt, RGBColor p doc.add_paragraph(这段文字包含) p.add_run(加粗).bold True p.add_run(和) p.add_run(红色).font.color.rgb RGBColor(255, 0, 0) p.add_run(以及) p.add_run(大号字).font.size Pt(20)这段代码会在一个段落中混合普通文本、加粗文本、红色文本和大号文本。add_run方法可以在段落中添加具有不同格式的文字块。4. 高级功能应用4.1 处理表格表格是Word文档中常用的元素。python-docx可以方便地创建和编辑表格# 创建一个4行3列的表格 table doc.add_table(rows4, cols3) # 填充表格数据 data [ [姓名, 年龄, 职业], [张三, 28, 工程师], [李四, 35, 设计师], [王五, 42, 经理] ] for row_idx in range(4): row_cells table.rows[row_idx].cells for col_idx in range(3): row_cells[col_idx].text data[row_idx][col_idx] # 添加一行新数据 new_row table.add_row().cells new_row[0].text 赵六 new_row[1].text 31 new_row[2].text 销售4.2 插入图片插入图片也很简单from docx.shared import Cm # 插入图片默认大小 doc.add_picture(logo.png) # 插入指定大小的图片 doc.add_picture(photo.jpg, widthCm(10), heightCm(7.5))4.3 分页与样式需要分页时可以使用doc.add_page_break()python-docx还支持使用Word内置样式# 使用内置样式 doc.add_paragraph(这是强调文本, styleIntense Quote) doc.add_paragraph(这是列表项, styleList Bullet)5. 读取和修改现有文档5.1 读取文档内容python-docx不仅能创建文档还能读取和修改已有文档doc Document(existing.docx) for paragraph in doc.paragraphs: print(paragraph.text)5.2 修改文档内容读取后可以直接修改内容# 修改第一个段落 doc.paragraphs[0].text 新的标题 # 修改表格内容 table doc.tables[0] table.cell(0, 0).text 新的表头 # 保存修改 doc.save(modified.docx)5.3 提取图片从文档中提取图片稍微复杂一些import os for rel in doc.part.rels: rel_obj doc.part.rels[rel] if image in rel_obj.target_ref: with open(os.path.basename(rel_obj.target_ref), wb) as f: f.write(rel_obj.target_part.blob)6. 实战案例批量生成报告让我们看一个实际案例批量生成员工绩效报告。假设我们有一个员工数据列表employees [ {name: 张三, department: 技术部, score: 95}, {name: 李四, department: 市场部, score: 88}, # 更多员工数据... ]我们可以写一个函数来为每个员工生成报告def generate_report(employee): doc Document() # 添加标题 title doc.add_heading(f{employee[name]}的绩效报告, level1) title.alignment WD_PARAGRAPH_ALIGNMENT.CENTER # 添加基本信息 doc.add_paragraph(f部门{employee[department]}) doc.add_paragraph(f绩效评分{employee[score]}) # 添加评语 if employee[score] 90: doc.add_paragraph(表现优异建议晋升。, styleIntense Quote) elif employee[score] 80: doc.add_paragraph(表现良好继续保持。, styleIntense Quote) else: doc.add_paragraph(有待提高建议培训。, styleIntense Quote) # 保存文件 doc.save(f{employee[name]}_绩效报告.docx)然后批量生成所有报告for emp in employees: generate_report(emp)这样就能为每个员工生成一份个性化的绩效报告大大提高了工作效率。