You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用python-docx替换Word文本时如何保留字体、加粗等样式设置?

解决python-docx替换Word文本时保留原字体样式的问题

直接修改段落文本或全局样式无法保留原文本的局部格式(如自定义字体、加粗、字号),核心原因是Word中的文本样式是以Run为单元存储的,每个Run拥有独立的格式属性,而非整个段落共享单一样式。

可行解决方案:遍历Run单元替换文本

通过遍历文档中所有段落、表格单元格内的Run,直接替换Run中的文本内容,这样会完整保留该Run原有的所有样式设置。

示例代码:

from docx import Document

def replace_text_preserve_style(doc, old_str, new_str):
    # 处理普通段落
    for para in doc.paragraphs:
        for run in para.runs:
            if old_str in run.text:
                run.text = run.text.replace(old_str, new_str)
    # 处理表格内容
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                replace_text_preserve_style(cell, old_str, new_str)

# 使用方式
doc = Document("test.docx")
replace_text_preserve_style(doc, "原始文本", "替换后文本")
doc.save("modified_test.docx")

为什么修改Normal样式无效?

你之前尝试修改Normal样式的代码只能改变基于该样式的默认格式,但如果文档中的文本已经通过手动设置(如选中文字改字体、加粗)覆盖了Normal样式的属性,修改全局样式不会影响这些局部格式;且直接替换段落文本会将段落重置为Normal样式,导致原有自定义格式丢失。

扩展:自定义替换文本的样式

如果需要给替换后的文本设置新样式,可以在替换后修改对应Run的属性:

if old_str in run.text:
    run.text = run.text.replace(old_str, new_str)
    # 示例:设置加粗和字体
    run.font.bold = True
    run.font.name = "Times New Roman"

内容的提问来源于stack exchange,提问作者Alpaca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:50:25