接上文Python开发从零开始-50.3-Office 文档处理,本文小编与大家分享 Python 处理 Office 文档的相关知识。
(3)高级文档样式
对于更复杂的样式设置,python-docx 允许直接操作底层 XML。OxmlElement 是 python-docx 库中用于直接操作 Word 文档底层 XML 结构的核心类。它位于 docx.oxml 模块,允许开发者创建、修改或插入标准的 OpenXML 元素,从而实现 python-docx 高层 API 无法直接支持的复杂格式(如自定义目录、复杂表格样式、特定字段代码等)。
OxmlElement 对象的常用功能包括:
创建自定义 XML 节点:通过 OxmlElement('标签名') 实例化一个新的 XML 元素,常用于构建 Word 内部特定的标签(如 w:fldChar、w:instrText);
设置属性与命名空间:结合 docx.oxml.ns.qn 函数处理带命名空间的属性(如 w:val、w:sz),确保生成的 XML 符合 Word 规范;
嵌入文档对象:将创建的 OxmlElement 添加到段落(paragraph._p)或运行(run._r)的底层元素列表中,直接操纵文档流。
注意:在使用时需注意,直接操作 XML 需要熟悉 Word 的 OpenXML 架构,错误的标签或属性可能导致文档损坏或在 Word 中无法打开。
(4)文档样式设置注意事项
1)样式覆盖
直接修改文档对象的样式属性(style)时,后设置的样式会覆盖前面设置的样式,例如:两个段落,第一个段落设置了样式,第二个段落设置不同样式,后设置的样式会覆盖前面设置的样式,导致两个段落样式相同。
# 添加第一个段落,字体颜色为红色para1 = doc.add_paragraph("这是第一个段落")para1.style.font.color.rgb = RGBColor(255, 0, 0)#添加第二个段落,字体颜色为黑色para2 = doc.add_paragraph("这是第二个段落")para1.style.font.color.rgb = RGBColor(0, 0, 0)
代码执行结果如下图所示:

要解决这个问题,需要自定义不同样式分别应用到不同段落。
# 创建段落样式1para_style1 = doc.styles.add_style('para_style1', WD_STYLE_TYPE.PARAGRAPH)# 从样式中获取字体 Font 对象font = para_style1.font# 字体颜色为红色font.color.rgb = RGBColor(0, 255, 0)# 段落左对齐para_style1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT# 创建段落样式2para_style2 = doc.styles.add_style('para_style2', WD_STYLE_TYPE.PARAGRAPH)# 从样式中获取字体 Font 对象font = para_style2.font# 字体颜色为红色font.color.rgb = RGBColor(0, 0, 255)# 段落右对齐para_style2.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT# 添加第三个段落,采用 para_style1 样式para3 = doc.add_paragraph("这是第三个段落")para3.style = para_style1#添加第四个段落,采用 para_style2 样式para4 = doc.add_paragraph("这是第四个段落")para4.style = para_style2
代码执行结果如下图所示:

2)中文字体处理
python-docx 主要依赖于底层的 Open XML 库来处理 Word 文档,所以可以识别并使用大多数在 Windows、Mac 或 Linux 系统中安装的字体。不过字体使用时应确保字体已安装,并尽量使用通用字体。
① 西文字体直接使用 font.name 属性进行设置即可
# 西文字体为 'Arial'font.name = 'Arial'
② 中文字体使用需要进行如下设置
para_style1._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体') 【小编提示】 OpenXml 库是微软官方提供的.NET 开发框架,用于在不安装 Microsoft Office 的情况下读写 Word、Excel、PowerPoint 等 Office 文档格式。 OpenXml 库在 GitHub 开源,官方文档可在微软学习平台查看。 |
3)样式复用和性能考虑
复杂文档中可能定义大量样式,需提前进行规划,并考虑样式复用;
应用样式不一定都能符合预期,需及时调试和检查;
对于大型文档,频繁地修改和添加样式可能会影响性能。应考虑尽量减少样式的重复应用,或者考虑批量处理。
受文章篇幅所限,下文将继续介绍 Python 处理 Office 文件的相关知识。
夜雨聆风