如何使用Python实现DOTM文件中的字符串搜索与替换
DOTM格式文件字符串替换实现方案
可以实现DOTM格式文件的指定字符串替换。
DOTM是带宏的Word模板文件,属于OOXML格式家族,和DOCX底层结构一致,仅多了宏存储的相关部分。你之前用的docx2python仅支持内容读取,替换操作可以用python-docx库完成,只要保存时保留.dotm后缀,原有宏不会丢失。
实现步骤
- 第一步:安装依赖库
执行命令:pip install python-docx - 第二步:使用如下代码完成替换,默认覆盖正文、表格内容,可按需启用页眉页脚的替换逻辑:
from docx import Document def replace_dotm_str(source_path, output_path, old_str, new_str): doc = Document(source_path) # 替换正文字符串 for para in doc.paragraphs: for run in para.runs: run.text = run.text.replace(old_str, new_str) # 替换表格内字符串 for table in doc.tables: for row in table.rows: for cell in row.cells: for para in cell.paragraphs: for run in para.runs: run.text = run.text.replace(old_str, new_str) # 按需启用页眉替换 # for section in doc.sections: # for para in section.header.paragraphs: # for run in para.runs: # run.text = run.text.replace(old_str, new_str) # 按需启用页脚替换 # for section in doc.sections: # for para in section.footer.paragraphs: # for run in para.runs: # run.text = run.text.replace(old_str, new_str) # 保存时必须保留.dotm后缀,避免宏丢失 doc.save(output_path) # 调用示例 replace_dotm_str("原文件路径.dotm", "输出文件路径.dotm", "待替换的旧字符串", "替换后的新字符串")
注意事项
- 上述代码遍历
run进行替换是为了尽量保留原文本格式,如果目标字符串被Word拆分到多个连续run中导致匹配失败,且不需要保留原有格式,可以直接修改paragraph.text完成替换。 - 如果DOTM中包含内容控件、嵌套域等特殊结构,需要额外拓展对应结构的遍历逻辑,常规纯文本场景上述代码可直接使用。
- 不要将处理后的文件保存为.docx后缀,否则文件内的宏会被自动清除。
内容的提问来源于stack exchange,提问作者Plunkan
相关产品推荐
相关产品推荐

