日常办公中,你是否遇到过这样的场景:需要从成百上千个 Word 文档里查找指定关键字(比如合同、财务报表、报销单),还要手动高亮标注出来?手动逐个处理不仅效率低下,还容易遗漏,简直是 “重复劳动天花板”。今天给大家分享一款基于 Python+PyQt5 开发的Word 关键字自动查找高亮工具,支持批量处理 doc/docx 文件、自定义高亮样式、保留原目录结构,彻底解放双手,让办公效率翻倍!一、工具核心功能
这款工具专为办公场景设计,解决了批量 Word 文档关键字查找标注的核心痛点,主要功能如下:1. 全量递归查找
支持指定根目录,自动遍历所有子目录下的.doc/.docx文件,无需手动选择单个文件,覆盖无死角。2. 多关键字批量处理
多个关键字用逗号分隔(如:财务报表,报销单,合同),一次配置即可批量查找并高亮所有关键字,支持中英文混合查找。3. 自定义高亮样式
可自由设置高亮关键字的字体(如微软雅黑、宋体)、字号、粗体 / 斜体、字体颜色,搭配黄色背景高亮,视觉更醒目:4. 保留原目录结构
处理后的文件会按照源文件的目录层级保存到指定结果目录,方便后续整理和查阅,不会打乱文件结构。5. 跨平台兼容(差异化支持)
.docx文件:Windows/Mac/Linux 全平台支持.doc文件:仅 Windows 平台支持(依赖 pywin32)6. 友好的可视化操作
基于 PyQt5 开发的图形界面,无需编写代码,小白也能轻松上手:7. 授权管理
支持 CPU 绑定授权、有效期验证,适合企业内部分发使用,避免工具滥用。二、快速上手教程
. 授权激活
将 JSON 文件发送给管理员获取.lic授权文件点击「导入授权文件」,选择获取到的.lic文件完成激活2. 工具使用步骤
步骤 1:配置查找目录
点击「选择目录」,设置需要查找的根目录(所有子目录都会被遍历)步骤 2:输入关键字
在关键字输入框中填写需要查找的内容,多个关键字用逗号分隔(如:财务报表,报销单,合同)。步骤 3:设置高亮样式
点击「设置高亮字体」,在弹窗中配置字体、字号、样式、颜色配置完成后,界面会显示当前高亮样式摘要,确认无误即可步骤 4:配置结果目录
点击「选择目录」,设置处理后文件的保存目录(建议选择空目录,避免文件覆盖)。步骤 5:开始处理
处理完成后会弹出提示,可直接前往结果目录查看处理后的文件。三、核心技术实现解析
对于想了解技术细节的开发者,这里简单拆解核心实现逻辑:1. Word 文档处理核心
docx 文件处理:基于python-docx库,遍历段落和表格,重构 Run 对象实现关键字高亮:核心高亮逻辑片段
def _highlight_paragraph(para, keywords, font_name, font_size, bold, italic, color):r, g, b = int(color[1:3], 16), int(color[3:5], 16), int(color[5:7], 16)for keyword in keywords:text = para.textif keyword not in text:continue
重构Run对象,实现关键字样式替换
new_runs = []current_pos = 0while True:pos = text.find(keyword, current_pos)if pos == -1:break
非关键字文本保留原样式
if pos > current_pos:run = para.add_run(text[current_pos:pos])new_runs.append(run)
关键字文本设置高亮样式
highlight_run = para.add_run(keyword)highlight_run.font.name = font_namehighlight_run.font.size = Pt(font_size)highlight_run.font.bold = boldhighlight_run.font.color.rgb = RGBColor(r, g, b)highlight_run.font.highlight_color = WD_COLOR_INDEX.YELLOWnew_runs.append(highlight_run)current_pos = pos + len(keyword)
doc 文件处理:基于pywin32调用 Word COM 接口,通过查找替换功能实现样式修改,兼容老版本 doc 文件。2. 多线程处理
使用 PyQt5 的QThread子线程处理文件,避免 UI 阻塞,同时实时更新进度和日志:class SearchThread(QThread):progress_update = pyqtSignal(int)进度更新信号log_update = pyqtSignal(str)日志更新信号def run(self):统计文件总数self.total_files = self.count_total_files(self.root_dir)遍历处理文件for entry in os.scandir(self.root_dir):if self.stop_flag:breakif entry.is_file() and Path(entry.name).suffix.lower() in [".doc", ".docx"]:success, msg = self.process_file(entry.path)self.processed_files += 1更新进度progress = int((self.processed_files / self.total_files) * 100)self.progress_update.emit(progress)
3. 路径处理优化
使用pathlib.Path替代传统os.path,简化路径操作,代码更简洁易维护保留原目录结构复制文件
def copy_with_structure(self, src_file):src_file = Path(src_file)rel_path = src_file.relative_to(self.root_dir)dst_file = self.result_dir / rel_pathdst_file.parent.mkdir(parents=True, exist_ok=True)return dst_file
四、注意事项
处理.doc文件时,需确保 Windows 系统已安装 Microsoft Word,且关闭待处理的 doc 文件(避免占用);非 Windows 系统(Mac/Linux)仅支持.docx文件处理,.doc文件会跳过;处理大量文件时,建议预留足够的磁盘空间,避免因空间不足导致处理失败;关键字区分大小写,如需不区分,可在代码中添加text.lower().find(keyword.lower())逻辑。五、总结
这款 Word 关键字查找高亮工具完美解决了办公场景中批量文档处理的痛点,既适合普通办公人员快速使用,也适合开发者二次定制(比如增加关键字大小写忽略、批量导出查找结果等功能)。无论是财务、法务、行政等需要处理大量合同 / 报表的岗位,还是需要批量整理文档的场景,这款工具都能极大提升工作效率,把重复劳动交给代码,把时间留给更有价值的工作。如果觉得这款工具有用,欢迎点赞、收藏、转发,也可以在评论区留言提出改进建议,一起优化升级!