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

能否通过代码提取/打印Word文档中含指定关键词的页面?

自动提取Word文档中含特定关键词的页面

针对你2000页Word文档的需求,下面提供几种适合新手的脚本方案,从提取页码到直接导出页面都有:

一、准备工作

  • 先安装Python(官网下载默认安装即可,勾选"Add Python to PATH")
  • 打开命令提示符,根据需要安装对应库:
    • 基础docx处理:pip install python-docx
    • Windows精准调用Word功能:pip install pywin32

二、提取含关键词的页码(跨平台)

这个方案用python-docx库,通过分页符判断页码,适合所有系统:

from docx import Document

def find_keyword_pages(doc_path, keyword):
    doc = Document(doc_path)
    current_page = 1
    matching_pages = []

    # 遍历所有段落,跟踪页码并检查关键词
    for para in doc.paragraphs:
        # 遇到分页符则页码+1
        if '\f' in para.text:
            current_page += 1
        # 检查段落是否包含关键词(不区分大小写)
        if keyword.lower() in para.text.lower():
            if current_page not in matching_pages:
                matching_pages.append(current_page)
    
    return sorted(matching_pages)

# 替换成你的文档路径和关键词
doc_path = "你的文档路径.docx"
target_keyword = "要查找的关键词"

result_pages = find_keyword_pages(doc_path, target_keyword)
print(f"包含关键词的页码:{result_pages}")

说明

  • 脚本会自动去重,同一页多次出现关键词只记录一次页码
  • 注意:docx本身没有原生的页码属性,通过分页符判断的页码可能和Word显示的有细微差异(比如大量图片/表格导致的自动分页),追求精准的话看下面的Windows方案。

三、导出指定页码到新文档(跨平台)

基于上面的页码结果,把对应页面内容复制到新文档:

from docx import Document

def extract_pages_to_new_doc(doc_path, target_pages, output_path):
    source_doc = Document(doc_path)
    new_doc = Document()
    current_page = 1
    is_target_page = False

    for para in source_doc.paragraphs:
        # 处理分页符,更新页码和目标页状态
        if '\f' in para.text:
            if is_target_page:
                new_doc.add_paragraph(para.text)
            current_page += 1
            is_target_page = current_page in target_pages
            continue
        
        # 如果当前是目标页,复制段落并保留基础格式
        if is_target_page:
            new_para = new_doc.add_paragraph()
            for run in para.runs:
                new_run = new_para.add_run(run.text)
                # 复制字体格式
                new_run.font.bold = run.font.bold
                new_run.font.italic = run.font.italic
                new_run.font.size = run.font.size
                new_run.font.name = run.font.name
    
    new_doc.save(output_path)

# 使用示例
doc_path = "你的文档路径.docx"
target_pages = [2, 5, 7]  # 替换成之前提取的页码列表
output_path = "提取结果.docx"

extract_pages_to_new_doc(doc_path, target_pages, output_path)
print(f"导出完成,文件路径:{output_path}")

四、Windows精准方案(调用Word原生功能)

直接调用Word的COM接口,页码和你在Word里看到的完全一致,还能直接打印:

提取精准页码

import win32com.client as win32

def get_exact_keyword_pages(doc_path, keyword):
    word = win32.Dispatch("Word.Application")
    word.Visible = False  # 后台运行不显示Word窗口
    doc = word.Documents.Open(doc_path)
    matching_pages = []

    # 调用Word的查找功能
    find_obj = doc.Content.Find
    find_obj.Text = keyword
    find_obj.MatchCase = False

    while find_obj.Execute():
        # 获取当前查找结果的页码
        page_num = find_obj.Information(3)
        if page_num not in matching_pages:
            matching_pages.append(page_num)
    
    doc.Close(SaveChanges=False)
    word.Quit()
    return sorted(matching_pages)

# Windows路径注意用双反斜杠或原始字符串
doc_path = r"C:\Users\XXX\Desktop\你的文档.docx"
target_keyword = "要查找的关键词"

result_pages = get_exact_keyword_pages(doc_path, target_keyword)
print(f"精准页码:{result_pages}")

直接打印指定页码

在上面的代码基础上,添加打印逻辑:

# 找到页码后,重新打开文档并打印
word = win32.Dispatch("Word.Application")
doc = word.Documents.Open(doc_path)
# 把页码列表转成逗号分隔的字符串,传给打印参数
doc.PrintOut(PageRange=",".join(map(str, result_pages)))
doc.Close(SaveChanges=False)
word.Quit()

新手注意事项

  1. 先拿几页的小文档测试脚本,没问题再用在2000页的大文档上
  2. 路径替换要准确:Windows用r"C:\xxx\yyy.docx",Mac/Linux用"/Users/xxx/yyy.docx"
  3. 如果是doc格式文档,先在Word里转成docx再处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:10:20