最强大且最常用的第三方库)
python-docx是目前 Python 生态中处理 Word 文档.docx 格式最强大且最常用的第三方库。它允许开发者在不依赖 Microsoft Word 软件的情况下创建、修改和提取 Word 文档内容。无论是自动化办公报表生成、合同批量制作还是从文档中提取结构化数据python-docx都能提供完美的解决方案。一、 环境搭建与核心概念1. 安装与准备在使用之前需要确保环境中安装了 Python并通过 pip 安装python-docx库pipinstallpython-docx2. 文档的层级结构理解python-docx的对象层级是掌握该技术的关键。一个 Word 文档在库中被抽象为三个主要层级Document文档对象代表整个 Word 文档是操作的入口。Paragraph段落对象文档的基本块级元素包括文本段落、标题、列表项等。Run文本块对象段落内的行内元素。同一个段落中如果字体、颜色、加粗状态不同就会被划分为不同的 Run。二、 创建与保存文档创建一个新的空白文档非常简单实例化Document类即可。如果需要基于现有的模板进行修改只需在实例化时传入模板文件的路径。fromdocximportDocument# 创建一个空白文档对象docDocument()# 或者打开一个现有的文档/模板# doc Document(existing_template.docx)# 操作完成后保存文档doc.save(demo_output.docx)三、 深度解析段落与文本样式在 Word 中文本的样式如字体、大小、颜色是依附于 Run 对象的而段落的样式如对齐、缩进、行距是依附于 Paragraph 对象的。1. 添加标题与段落fromdocx.sharedimportPt,RGBColorfromdocx.enum.textimportWD_PARAGRAPH_ALIGNMENT# 添加一级标题headingdoc.add_heading(Python自动化办公报告,level1)heading.alignmentWD_PARAGRAPH_ALIGNMENT.CENTER# 标题居中# 添加普通段落pdoc.add_paragraph()# 设置段落格式首行缩进p.paragraph_format.first_line_indentPt(24)# 约等于中文字符的两个单位# 在段落中添加不同样式的文本块Runrun1p.add_run(这是普通文本)run2p.add_run(这是加粗红色文本。)run2.font.boldTruerun2.font.color.rgbRGBColor(255,0,0)run2.font.sizePt(14)run2.font.nameTimes New Roman# 设置西文字体2. 插入分页符在生成长报告时经常需要强制分页doc.add_page_break()四、 表格操作数据呈现的核心表格是办公自动化中最常见的元素。python-docx提供了灵活的表格创建和单元格访问接口。1. 创建与填充表格# 创建一个 3行 3列 的表格tabledoc.add_table(rows3,cols3)table.styleTable Grid# 设置表格样式为带边框# 填充表头hdr_cellstable.rows[0].cells hdr_cells[0].text姓名hdr_cells[1].text年龄hdr_cells[2].text职业# 填充数据行dataforname,age,jobindata:row_cellstable.add_row().cells row_cells[0].textname row_cells[1].textstr(age)row_cells[2].textjob2. 遍历与修改表格可以通过table.rows和row.cells进行嵌套循环访问任意单元格forrowintable.rows:forcellinrow.cells:# 可以在这里读取 cell.text 或修改内容ifcell.text张三:cell.text张三(已审核)五、 插入图片插入图片使用add_picture方法可以指定图片的宽度和高度。Inches和Cm类用于处理尺寸单位。fromdocx.sharedimportInches# 插入图片指定宽度为 4 英寸高度自动按比例缩放doc.add_picture(example.png,widthInches(4.0))六、 综合实战生成自动化数据报表下面是一个完整的综合案例。假设我们需要从数据源模拟 Excel 数据读取信息生成一份包含标题、分析文本、数据表格和总结的 Word 报告。fromdocximportDocumentfromdocx.sharedimportInches,Pt,RGBColorfromdocx.enum.textimportWD_PARAGRAPH_ALIGNMENTfromdocx.oxml.nsimportqndefcreate_report():# 1. 初始化文档docDocument()# 设置全文默认中文字体解决中文显示问题doc.styles[Normal].font.nameu宋体doc.styles[Normal]._element.rPr.rFonts.set(qn(w:eastAsia),u宋体)# 2. 添加封面标题titledoc.add_heading(2023年度销售数据分析报告,0)title.alignmentWD_PARAGRAPH_ALIGNMENT.CENTER# 3. 添加前言段落introdoc.add_paragraph()intro_formatintro.paragraph_format intro_format.line_spacing1.5# 1.5倍行距run_introintro.add_run( 本报告旨在总结2023年度各季度的销售情况。通过自动化工具生成数据准确无误。以下是详细的数据统计表)run_intro.font.sizePt(12)# 4. 模拟数据并创建表格sales_data[[季度,销售额(万元),增长率],[第一季度,120,5%],[第二季度,150,12%],[第三季度,180,8%],[第四季度,200,15%]]tabledoc.add_table(rowslen(sales_data),cols3)table.styleLight Shading Accent 1# 使用内置的清爽表格样式# 填充表格数据fori,row_datainenumerate(sales_data):rowtable.rows[i]forj,textinenumerate(row_data):row.cells[j].texttext# 加粗表头ifi0:row.cells[j].paragraphs[0].runs[0].font.boldTruedoc.add_paragraph()# 空行# 5. 添加图片假设目录下有 chart.png# doc.add_picture(chart.png, widthInches(5))# 6. 添加结论conclusiondoc.add_heading(结论与建议,level2)p_concdoc.add_paragraph( 从数据可以看出下半年销售额明显高于上半年建议明年加大对上半年的营销投入。)# 7. 保存文档file_name自动化销售报表.docxdoc.save(file_name)print(f报告生成成功{file_name})if__name____main__:create_report()七、 进阶技巧与注意事项中文字体设置python-docx默认设置的是西文字体。要设置中文字体如宋体、黑体需要操作底层的 XML 元素如上文代码中qn(w:eastAsia)的用法。DOC 转 DOCXpython-docx仅支持.docx格式。如果源文件是老旧的.doc格式需要借助win32com库调用本地 Word 应用程序进行格式转换转换后再使用python-docx处理。样式管理尽量使用 Word 内置的样式如Table Grid这比手动逐个单元格设置边框要高效且稳定得多。