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

Python使用docxtpl处理docx无法识别content control值的解决方案咨询

解决方案

1 纯Python脚本处理(跨平台,无Office依赖)

直接解析docx的原生XML结构,移除所有内容控件标签、保留内部文本,处理后的文件可直接被docxtpl识别。
需先安装依赖:pip install python-docx

from docx import Document

def remove_content_controls(doc_path, output_path):
    doc = Document(doc_path)
    # 遍历文档所有XML元素,找到内容控件标签<w:sdt>
    for parent in doc.element.iter():
        for child in list(parent):
            if child.tag.endswith('sdt'):
                # 提取内容控件内部的内容节点<w:sdtContent>
                sdt_content = child.find('.//'+child.tag.replace('sdt', 'sdtContent'))
                if sdt_content is not None:
                    # 将控件内容替换到控件原来的位置
                    index = parent.index(child)
                    for content_child in list(sdt_content):
                        parent.insert(index, content_child)
                        index += 1
                # 删除原内容控件标签
                parent.remove(child)
    doc.save(output_path)

# 调用示例
remove_content_controls("你的原文件.docx", "移除控件后文件.docx")

2 COM接口自动处理(Windows环境,完全还原手动操作效果)

调用Word本地程序的COM接口执行移除操作,和手动操作的效果完全一致,不会丢失SharePoint同步的取值。
需先安装依赖:pip install pywin32

import win32com.client as win32

def remove_cc_by_word(input_path, output_path):
    word = win32.gencache.EnsureDispatch('Word.Application')
    word.Visible = False # 后台运行不弹出窗口
    doc = word.Documents.Open(input_path)
    # 删除所有内容控件,保留文本
    doc.ContentControls.DeleteAll()
    doc.SaveAs2(output_path, FileFormat=16) # 16对应docx格式
    doc.Close()
    word.Quit()

# 调用示例
remove_cc_by_word("你的原文件.docx", "移除控件后文件.docx")

3 手动操作方法

无需代码的手动操作步骤如下:

  • 打开目标docx文件,按Alt+F11调出VBA编辑器
  • 按Ctrl+G打开立即执行窗口
  • 输入代码ActiveDocument.ContentControls.DeleteAll后按回车执行
  • 保存文档即可完成内容控件移除,所有文本会保留为普通格式

注意:此前直接用os.rename修改后缀名不属于正规格式转换,仅修改了文件后缀标识,所以会出现内容丢失的问题,不建议使用。

处理完成后的文档即可正常使用docxtpl.DocxTemplate加载,完成变量替换操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 18:45:08