如何用MS Word VBA的Revisions对象批量提取docx插入内容
提取DOCX文档中修订的插入内容
如果用python-docx库可以直接操作Revisions集合,以下是具体实现方案,覆盖单文档和批量处理场景:
1. 安装依赖
首先安装python-docx库:
pip install python-docx
2. 单文档提取插入内容
编写函数提取单个DOCX中的所有插入修订文本,包含段落和表格内的内容:
from docx import Document from docx.enum.text import WD_REVISION_TYPE def extract_inserted_text(doc_path): doc = Document(doc_path) inserted_texts = [] # 遍历段落修订 for para in doc.paragraphs: for revision in para.revisions: if revision.type == WD_REVISION_TYPE.INSERT: inserted_texts.append(revision.text) # 遍历表格单元格内的修订 for table in doc.tables: for row in table.rows: for cell in row.cells: for para in cell.paragraphs: for revision in para.revisions: if revision.type == WD_REVISION_TYPE.INSERT: inserted_texts.append(revision.text) return inserted_texts
3. 批量处理多个DOCX
如果要处理文件夹下所有DOCX文件,可使用以下批量处理代码,结果会保存到汇总文本:
import os def batch_extract(folder_path): results = {} for filename in os.listdir(folder_path): if filename.lower().endswith(".docx"): file_path = os.path.join(folder_path, filename) texts = extract_inserted_text(file_path) results[filename] = texts # 保存结果到文件 with open("插入修订内容汇总.txt", "w", encoding="utf-8") as f: for doc_name, texts in results.items(): f.write(f"=== {doc_name} ===\n") if texts: for idx, text in enumerate(texts, 1): f.write(f"{idx}. {text}\n") else: f.write("无插入类型的修订内容\n") f.write("\n") # 替换为你的DOCX文件夹路径 batch_extract("path/to/your/docx/folder")
关键注意事项
- 确保DOCX的修订记录未被接受/拒绝:一旦修订被接受,Revisions集合中会移除该记录,无法提取
- 若文档包含文本框、形状等其他容器,需额外遍历对应对象的修订集合(可根据需求扩展代码)
- 保存结果时使用
utf-8编码,避免中文乱码
内容的提问来源于stack exchange,提问作者aaaaa0a
相关产品推荐
相关产品推荐

