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

如何用Python在Word文档指定文本加注释?求Bayoo-docx/python-docx代码

在Word文档特定文本中添加注释的Python实现

一、使用python-docx实现

python-docx本身没有提供直接添加注释的API,需要通过操作底层OOXML结构实现,以下是具体代码:

代码示例

from docx import Document
from docx.oxml import OxmlElement
from docx.oxml.ns import qn
from datetime import datetime

def add_comment_to_text(doc_path, target_text, comment_text, author="Python Script"):
    doc = Document(doc_path)
    comment_id = 1  # 注释ID需唯一,批量添加时要递增
    
    # 遍历所有段落查找目标文本
    for para in doc.paragraphs:
        if target_text not in para.text:
            continue
        # 遍历段落内的文本块
        for run in para.runs:
            if target_text in run.text:
                # 创建注释节点
                comment = OxmlElement('w:comment')
                comment.set(qn('w:id'), str(comment_id))
                comment.set(qn('w:author'), author)
                comment.set(qn('w:date'), datetime.now().isoformat())
                
                # 填充注释内容
                text_node = OxmlElement('w:t')
                text_node.text = comment_text
                run_node = OxmlElement('w:r')
                run_node.append(text_node)
                para_node = OxmlElement('w:p')
                para_node.append(run_node)
                comment.append(para_node)
                
                # 将注释加入文档的注释集合
                comments_part = doc.part._element.xpath('/w:document/w:comments')
                if not comments_part:
                    comments_element = OxmlElement('w:comments')
                    doc.part._element.append(comments_element)
                    comments_part = [comments_element]
                comments_part[0].append(comment)
                
                # 给目标文本块添加注释引用标记
                comment_ref = OxmlElement('w:commentReference')
                comment_ref.set(qn('w:id'), str(comment_id))
                run._r.append(comment_ref)
                
                doc.save('commented_doc.docx')
                return "注释添加成功"
    return "未找到目标文本"

# 使用示例
add_comment_to_text("original.docx", "特定文本", "这是添加的注释内容")

注意事项

  • 若目标文本跨多个文本块(run),需调整逻辑,可合并相关run后再添加注释;
  • 批量添加注释时,要维护递增的唯一ID,避免冲突;
  • 日期格式必须符合ISO标准,否则Word无法正常识别注释。

二、使用Bayoo-docx实现

Bayoo-docx是python-docx的衍生版本,部分底层操作更简洁,实现逻辑与python-docx基本一致:

代码示例

from bayoo_docx import Document
from bayoo_docx.oxml import OxmlElement
from bayoo_docx.oxml.ns import qn
from datetime import datetime

def add_comment_bayoo(doc_path, target_text, comment_text, author="Python Script"):
    doc = Document(doc_path)
    comment_id = 1
    
    for para in doc.paragraphs:
        if target_text not in para.text:
            continue
        for run in para.runs:
            if target_text in run.text:
                # 创建注释节点
                comment = OxmlElement('w:comment')
                comment.set(qn('w:id'), str(comment_id))
                comment.set(qn('w:author'), author)
                comment.set(qn('w:date'), datetime.now().isoformat())
                
                # 填充注释内容
                text_node = OxmlElement('w:t')
                text_node.text = comment_text
                run_node = OxmlElement('w:r')
                run_node.append(text_node)
                para_node = OxmlElement('w:p')
                para_node.append(run_node)
                comment.append(para_node)
                
                # 直接操作文档的注释集合
                if not doc._element.comments:
                    doc._element.comments = OxmlElement('w:comments')
                doc._element.comments.append(comment)
                
                # 添加注释引用标记
                comment_ref = OxmlElement('w:commentReference')
                comment_ref.set(qn('w:id'), str(comment_id))
                run._r.append(comment_ref)
                
                doc.save('bayoo_commented.docx')
                return "注释添加成功"
    return "未找到目标文本"

# 使用示例
add_comment_bayoo("original.docx", "特定文本", "这是Bayoo-docx添加的注释")

说明

Bayoo-docx简化了文档注释集合的访问方式,无需通过xpath查询,直接通过doc._element.comments即可操作,其余逻辑与python-docx一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:55:29