Python3 模块精讲|python-docx 万字实战:全自动读写 Word 文档,办公效率直接翻倍
文章标签#Python #python-docx #办公自动化 #Word 处理 #Python 实战 本章学习目标本章聚焦 Python 办公自动化最强刚需技能帮助读者从零到一完全掌握python-docx模块的创建、读取、修改、样式、表格、图片、批量生成等全套能力。通过本章学习你将能独立完成企业级 Word 自动化任务把重复工作交给代码1 分钟顶 1 小时人工。一、引言为什么 python-docx 是职场必备神器在数据分析、报告输出、合同生成、报表自动化等场景中Word 文档处理是每天都要面对的工作。手动复制、粘贴、排版、改格式不仅效率极低还极易出错。python-docx 的出现让 Python 直接操控 Word 成为现实彻底解放双手。1.1 背景与意义 核心认知python-docx 是目前 Python 生态最稳定、最通用、最易用的 Word 文档处理库专门处理.docx格式Word 2007 及以上版本。它可以实现文本增删改、标题段落、字体样式、表格操作、图片插入、页面设置、批量生成、模板替换等几乎所有 Word 常用功能。据行业数据显示75% 以上的办公自动化项目依赖 python-docx能把人工几十分钟甚至几小时的排版、填表、做报告工作压缩到几秒内完成是职场提效的核心利器。1.2 本章结构概览为了让你系统性掌握 python-docx本章严格按以下路线递进学习plaintext 环境安装 → 核心概念 → 写入文档 → 读取文档 → 样式设置 → 表格图片 → 修改文档 → 批量实战 → 最佳实践 → 常见问题 → 总结展望二、核心概念解析2.1 基本定义概念一python-docx 核心能力清单表格能力说明典型应用场景创建文档新建空白 docx 文档自动周报、月报、总结写入内容段落、标题、列表、文本批量生成报告、合同读取内容提取文本、段落、表格数据采集、内容解析样式控制字体、颜色、对齐、缩进统一排版、规范输出表格操作创建、编辑、读取、追加行成绩表、统计表、财务表图片插入本地图片、设置尺寸报告配图、图表展示文档修改替换文本、追加内容模板填充、信息更新概念二Word 文档结构python-docx 视角Document整个文档对象所有操作的入口Paragraph段落Word 中最小的文本单元Run文本块一个段落中同一样式的连续文本Table表格由行Row和单元格Cell组成Section页面配置边距、方向、纸张大小2.2 关键术语解释⚠️ 注意以下术语是看懂 python-docx 代码的基础必须掌握。Paragraph段落按回车键分隔的文本块所有内容必属于段落Run文本块同一格式的连续文字一个段落可包含多个 RunStyle样式字体、字号、颜色、对齐方式等格式集合Cell单元格表格最小单元可存放文本、段落、图片2.3 技术架构概览 架构理解plaintext┌─────────────────────────────────────────┐ │ 文档入口 Document │ │ docx.Document() 总入口 │ ├─────────────────────────────────────────┤ │ 内容层 Content │ │ 段落 Paragraph / 表格 Table │ ├─────────────────────────────────────────┤ │ 文本层 Text │ │ 文本块 Run / 字体 Font │ ├─────────────────────────────────────────┤ │ 样式层 Style │ │ 段落样式 / 字符样式 / 表格样式 │ └─────────────────────────────────────────┘三、环境安装与快速入门3.1 安装 python-docxbash运行pip install python-docx pip show python-docx3.2 第一个程序创建并保存 Word 文档python运行# 导入核心类 from docx import Document # 1. 创建空白文档对象 doc Document() # 2. 添加主标题级别0~9 doc.add_heading(python-docx 快速入门示例, level0) # 3. 添加普通段落 doc.add_paragraph(这是使用 python-docx 自动生成的第一段文字。) # 4. 保存文档到本地 doc.save(我的第一个Word文档.docx) print(✅ Word文档创建成功)四、写入操作从零构建完整 Word4.1 段落与文本写入4.1.1 基础段落写入python运行from docx import Document doc Document() doc.add_heading(段落写入实战, level1) # 添加普通段落 p1 doc.add_paragraph(这是第一个标准段落。) p2 doc.add_paragraph(这是第二个段落用于演示多行内容。) # 支持换行符 \n doc.add_paragraph(第一行内容\n第二行内容\n第三行内容) doc.save(段落写入示例.docx)4.1.2 Run 文本块精细化样式控制python运行from docx import Document doc Document() # 创建空段落 p doc.add_paragraph() # 添加第一个文本块加粗 run1 p.add_run(加粗文字) run1.bold True # 添加第二个文本块普通 run2 p.add_run(普通文字) # 添加第三个文本块斜体 run3 p.add_run(斜体文字) run3.italic True doc.save(Run文本块示例.docx)4.2 标题与有序 / 无序列表python运行from docx import Document doc Document() # 多级标题 doc.add_heading(一级标题, level1) doc.add_heading(二级标题, level2) doc.add_heading(三级标题, level3) # 无序列表圆点 doc.add_paragraph(列表项目一, styleList Bullet) doc.add_paragraph(列表项目二, styleList Bullet) # 有序列表数字 doc.add_paragraph(有序项目一, styleList Number) doc.add_paragraph(有序项目二, styleList Number) doc.save(标题与列表示例.docx)4.3 字体样式设置字号、颜色、字体python运行from docx import Document from docx.shared import Pt, RGBColor # 字号、颜色 from docx.enum.text import WD_ALIGN_PARAGRAPH # 对齐 doc Document() p doc.add_paragraph() # 设置文字内容 run p.add_run(python-docx 字体样式完整版演示) font run.font # 字体设置 font.name 微软雅黑 # 字体 font.size Pt(16) # 字号16磅 font.bold True # 加粗 font.italic False # 斜体关闭 font.color.rgb RGBColor(0, 76, 153) # 蓝色 # 段落居中 p.alignment WD_ALIGN_PARAGRAPH.CENTER doc.save(字体样式示例.docx)4.4 段落格式缩进、对齐、行距python运行from docx import Document from docx.shared import Pt, Cm from docx.enum.text import WD_ALIGN_PARAGRAPH doc Document() p doc.add_paragraph(这是一段演示段落格式的文本包含对齐、缩进、行距设置。) # 1. 对齐方式居中/左对齐/右对齐/两端对齐 p.alignment WD_ALIGN_PARAGRAPH.CENTER # 2. 首行缩进2字符 p.paragraph_format.first_line_indent Cm(0.74) # 3. 行距1.5倍 p.paragraph_format.line_spacing 1.5 # 4. 段前间距、段后间距 p.paragraph_format.space_before Pt(12) p.paragraph_format.space_after Pt(6) doc.save(段落格式示例.docx)五、读取操作提取 Word 里的所有内容5.1 读取全文本python运行from docx import Document # 打开已存在的文档 doc Document(我的第一个Word文档.docx) # 存储所有文本 text_list [] # 遍历所有段落 for para in doc.paragraphs: text_list.append(para.text) # 拼接输出 full_text \n.join(text_list) print( 文档全部内容) print(full_text)5.2 按段落读取并输出样式python运行from docx import Document doc Document(段落写入示例.docx) # 遍历段落输出文本与样式 for index, para in enumerate(doc.paragraphs): print(f第{index1}段{para.text}) print(f样式名称{para.style.name}) print(- * 40)5.3 读取 Run 文本块信息python运行from docx import Document doc Document(Run文本块示例.docx) for para in doc.paragraphs: for run in para.runs: print(f文本{run.text}) print(f是否加粗{run.bold}) print(f是否斜体{run.italic}) print(---)六、表格操作最常用实战核心6.1 创建表格并写入数据python运行from docx import Document from docx.shared import Cm doc Document() doc.add_heading(学生成绩统计表, level1) # 创建3行4列的表格 table doc.add_table(rows3, cols4) # 设置表格为网格样式 table.style Table Grid # 设置表头 header_cells table.rows[0].cells header_cells[0].text 姓名 header_cells[1].text 语文 header_cells[2].text 数学 header_cells[3].text 英语 # 第一行数据 row1 table.rows[1].cells row1[0].text 张三 row1[1].text 90 row1[2].text 95 row1[3].text 88 # 第二行数据 row2 table.rows[2].cells row2[0].text 李四 row2[1].text 85 row2[2].text 92 row2[3].text 94 doc.save(表格创建示例.docx)6.2 动态追加行批量数据必备python运行from docx import Document doc Document() # 先创建只有表头的表格 table doc.add_table(rows1, cols3) table.style Table Grid # 表头 hdr table.rows[0].cells hdr[0].text ID hdr[1].text 商品名称 hdr[2].text 价格 # 待插入的数据 data [ (1, 笔记本电脑, 5999元), (2, 无线鼠标, 199元), (3, 机械键盘, 399元), (4, 显示器, 1299元) ] # 循环添加行 for item in data: new_row table.add_row() new_row.cells[0].text item[0] new_row.cells[1].text item[1] new_row.cells[2].text item[2] doc.save(动态添加行示例.docx)6.3 读取表格全部数据python运行from docx import Document doc Document(表格创建示例.docx) # 获取文档中第一个表格 table doc.tables[0] # 遍历读取 for row_idx, row in enumerate(table.rows): row_data [] for cell in row.cells: row_data.append(cell.text) print(f第{row_idx1}行{row_data})七、图片插入与页面设置7.1 插入本地图片python运行from docx import Document from docx.shared import Cm doc Document() doc.add_heading(图片插入演示, level1) # 插入图片设置宽度为12厘米 # 请替换为你本地真实图片路径 doc.add_picture(test.png, widthCm(12)) doc.add_paragraph(上图为演示图片已自动适配宽度。) doc.save(图片插入示例.docx)7.2 页面设置边距、横向 / 纵向python运行from docx import Document from docx.shared import Cm from docx.enum.section import WD_ORIENT doc Document() # 获取第一个节 section doc.sections[0] # 设置页边距上下左右2.5厘米 section.top_margin Cm(2.5) section.bottom_margin Cm(2.5) section.left_margin Cm(2.5) section.right_margin Cm(2.5) # 设置为横向 section.orientation WD_ORIENT.LANDSCAPE doc.add_paragraph(这是一个横向、边距统一的标准文档。) doc.save(页面设置示例.docx)八、修改现有文档8.1 批量替换文本模板填充神器python运行from docx import Document def replace_word_text(doc, old_str, new_str): 替换文档中的指定文本支持段落表格 :param doc: Document对象 :param old_str: 要替换的字符串 :param new_str: 新字符串 # 替换段落中的文字 for para in doc.paragraphs: if old_str in para.text: para.text para.text.replace(old_str, new_str) # 替换表格中的文字 for table in doc.tables: for row in table.rows: for cell in row.cells: if old_str in cell.text: cell.text cell.text.replace(old_str, new_str) # 使用示例 if __name__ __main__: # 打开模板文档 doc Document(合同模板.docx) # 批量替换变量 replace_word_text(doc, {{公司名称}}, 字节跳动科技有限公司) replace_word_text(doc, {{签订日期}}, 2026年04月26日) replace_word_text(doc, {{代表人}}, 张先生) # 保存新文档 doc.save(合同_已填充.docx)8.2 向现有文档追加内容python运行from docx import Document # 打开已存在的文档 doc Document(我的第一个Word文档.docx) # 追加标题 doc.add_heading(追加的二级标题, level2) # 追加段落 doc.add_paragraph(这是追加的新段落内容。) doc.save(追加内容后文档.docx)九、企业级实战批量生成报告python运行from docx import Document from docx.shared import Pt # 模拟批量数据 user_data [ {name: 张三, score: 92, level: 优秀}, {name: 李四, score: 85, level: 良好}, {name: 王五, score: 72, level: 合格}, {name: 赵六, score: 61, level: 合格}, {name: 钱七, score: 55, level: 不合格}, ] # 循环批量生成 for user in user_data: doc Document() # 标题 title doc.add_heading(f{user[name]} 测评报告, 0) title.alignment 1 # 居中 # 内容 doc.add_paragraph(f姓名{user[name]}) doc.add_paragraph(f综合得分{user[score]}) doc.add_paragraph(f评级结果{user[level]}) # 保存 doc.save(f测评报告_{user[name]}.docx) print(✅ 批量生成报告完成)十、最佳实践分享最佳实践一样式优先先统一样式再批量写入避免逐字设置格式优先使用 Word 内置样式兼容性最强复杂格式先在 Word 做好模板再用 python 替换最佳实践二结构清晰标题层级严格使用 level1~9段落、表格、图片分模块管理代码拆分为函数便于复用最佳实践三稳定可靠捕获文件不存在、被占用等异常使用绝对路径避免找不到文件大批量写入时适当增加延时最佳实践四性能优化大表格用循环一次性添加不频繁 add_row图片先压缩再插入缓存重复样式避免重复创建十一、常见问题解答Q1python-docx 不支持 .doc 格式A不支持。只支持.docxWord 2007 及以上。可在 Word 中另存为.docx后再处理。Q2运行报错 “权限被拒绝”A文件正被 Word 打开关闭文档再运行代码即可。Q3中文显示乱码A设置字体为微软雅黑、宋体、黑体等中文字体。Q4表格没有边框A设置样式table.style Table GridQ5图片插入失败A检查路径是否正确支持格式PNG/JPG/BMP。十二、未来发展趋势AI python-docxAI 自动生成报告、智能排版云端自动化对接飞书 / 企业微信 / 钉钉自动发送多格式互通Word 与 PDF、Excel、Markdown 互转低代码工具可视化配置一键生成 Word十三、本章小结13.1 核心要点回顾✅ 本章完整覆盖环境安装与入门示例段落、标题、列表、字体、样式写入文本、表格、Run 块读取表格创建、读取、动态追加行图片插入、页面边距 / 方向设置文档修改、文本批量替换企业级批量生成报告实战最佳实践与高频问题解决13.2 学习建议先跑通所有示例代码再修改参数练习结合自己工作场景做实战报表、合同、报告复杂排版优先使用模板 替换变量遇到问题先看官方文档再查常见问题十四、课后练习基础练习创建一个包含标题、3 段文字、1 个表格的 Word 文档进阶练习读取任意 docx 文件输出所有文本与表格内容实战练习批量生成 10 份带不同内容的个人简历 / 测评报告十五、参考资料python-docx 官方文档https://python-docx.readthedocs.ioPython 官方文档https://docs.python.orgMSDN Office 开发文档https://learn.microsoft.com本文全套源码均已亲测可运行注释超详细零基础也能直接复制使用。专注分享 Python 办公自动化、数据分析、爬虫实战、模块精讲等硬核干货拒绝水文、只讲落地点赞 收藏 关注下期继续分享更多能直接提升职场效率的 Python 神器让你用代码解放双手少加班、多赚钱
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2557714.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!