1.0.3
Excel 关键字智能搜索工具
在指定目录中批量检索 Excel / Word / CSV / 文本文件中的关键字,提供图形界面与命令行多种交付形态。 同一需求用 Python、Go、Rust 三种技术栈各自独立实现,能力互补:
| 目录 | 技术栈 | 交付物 | 详细文档 |
|---|---|---|---|
python/ |
Python 3 + PyQt6 + pandas | 桌面 GUI | python/README.md |
go/ |
Go + excelize | 桌面版 + WebUI 版 + CLI 版 | go/README.md |
rust/ |
Rust + calamine + egui/eframe | 原生桌面 GUI + CLI | rust/README.md |
三个版本均支持将搜索结果导出为 CSV(全部列双引号包裹 + UTF-8 BOM,Excel 双击打开不乱码)。
仓库结构
.
├── python/ # Python 版(PyQt6 GUI,带内容预览)
├── go/ # Go 版(desktop / webui / searcher 三入口,共享 internal/search 引擎)
├── rust/ # Rust 版(CLI + 原生 egui 桌面版)
└── README.md # 本文件:三版本总览与选型对比
三版本能力对比
| 维度 | Python 版 | Go 版 | Rust 版 |
|---|---|---|---|
| 交付形态 | GUI | 桌面版 + WebUI + CLI | 桌面版 + CLI |
| 界面实现 | PyQt6 原生控件 | 本地 HTTP + Edge 应用窗口 / 浏览器 | egui 原生窗口(无浏览器) |
| 文件格式 | .xlsx .xls .csv .txt | .xlsx/.xlsm/.xltx/.xltm .docx/.docm .csv .txt | Go 基础上额外 .xls .xlsb .ods |
| 结果粒度 | 文件级(匹配数 + 命中预览) | 单元格级(Sheet/位置/内容) | 单元格级(Sheet/位置/内容) |
| 内容预览面板 | 支持:表格渲染 | 无(悬停提示) | 无(悬停提示) |
| 界面语言 | 4 种(简/繁/EN/日) | 4 种(简/繁/EN/日) | 1 种(简体中文) |
| 导出 CSV | 5 列文件级 | 5 列命中级 | 5 列命中级(原生保存对话框) |
| 搜索历史 | QSettings | .cache/search_history.json | 与 Go 桌面版同文件互通 |
| 结果缓存 | python/.index/(独立格式) | .cache/(schema v2) | 与 Go 同 schema 互通 |
| 匹配语义 | Python 正则(IGNORECASE / \b) | NFC + Unicode 折叠 + 单词边界 | 与 Go 逐字节对齐 |
| 取消/超时 | 手动停止 | 服务端超时取消600s(可手动取消) | 桌面后台线程,无超时截断 (可手动取消) |
| 运行环境 | Python >= 3.8 + pip 依赖 | 免依赖 | 免依赖 |
| 单文件 exe 体积 | 约 300 MB(PyInstaller) | CLI 6.02 MB / 桌面 9.38 MB / Web 9.49 MB | CLI 1.23 MB / 桌面 9.14 MB |
| 启动速度 | 慢(解释器 + 重依赖) | 快 | 最快 |
| 交叉编译 | 依赖平台打包环境 | GOOS/GOARCH 即可(无 CGO) | rustup target + 目标 C 链接器 |
匹配语义说明:Python 版未做 NFC 规范化且
\b不识别中日韩词边界,Go/Rust 两版逐字节对齐。 跨版本核对搜索结果时建议统一用默认的模糊匹配模式。
各版本优缺点与选型建议
Python 版:功能最全的「全能型」
- 优点:三版本中唯一提供命中内容预览面板(Excel 表格化渲染 / 文本高亮),核对命中内容无需打开源文件
- 优点:PyQt6 控件生态成熟,右键菜单、目录历史、双击打开文件等交互体验打磨最充分
- 优点:迭代成本最低,改完即跑、无编译环节;作为最早的主力版本,功能最完整
- 优点:xlsx 解析多级回退,自研高速 XML 解析(跳过 styles.xml 膨胀)再经 pandas/openpyxl 兜底, 坏文件与超大样式表兼容性最好
- 缺点:分发重,PyInstaller 单文件 exe 约 300 MB;源码运行需要 Python 环境与 pip 依赖
- 缺点:启动慢、内存占用高;受 GIL 限制,解析并发上限低于 Go/Rust
- 缺点:无命令行版本(不便脚本化);不支持 Word(.docx)
- 适合:需要边搜边核对内容的精查工作流、习惯 Python 生态的开发者。 详见 python/README.md。
Go 版:形态最全的「工程型」
- 优点:三版本中唯一提供 WebUI 与 CLI,覆盖浏览器使用、服务器部署、脚本/批处理集成场景
- 优点:三入口共享同一搜索引擎(
internal/search),行为完全一致;goroutine 真并发 + context 全链路取消 - 优点:单文件 6~10 MB 免依赖分发;无 CGO,交叉编译最容易(CI / Linux / macOS 友好)
- 优点:支持 Word(.docx/.docm)段落级定位;前端四语言 i18n
- 缺点:桌面版窗口依赖 Windows + Edge 应用模式,关窗靠 30 秒心跳判活退出
- 缺点:搜索在服务端执行,长任务受请求超时截断(默认 600 秒)
- 缺点:改前端样式需要 Node + Tailwind 工具链(CSS 产物已预编译提交,日常无需)
- 适合:需要 WebUI / 命令行 / 跨平台发布,或要求小体积免依赖分发的场景。 详见 go/README.md。
Rust 版:性能与体验最优的「极致型」
- 优点:体积最小、内存最低、启动最快(桌面 9.6 MB、CLI 1.3 MB)
- 优点:桌面架构最优,原生窗口关窗即退、搜索跑后台线程(无服务端超时截断)、 万级结果虚拟滚动依然流畅
- 优点:Excel 格式支持最全(calamine 额外支持 .xls / .xlsb / .ods)
- 优点:匹配语义与 Go 逐字节对齐,缓存文件可与 Go 互通互换;导出用系统原生保存对话框
- 缺点:界面仅简体中文(未做 i18n);无 WebUI 形态
- 缺点:编译慢,release 开了 LTO + 单 codegen,全量构建 2~20 分钟
- 缺点:Windows 构建需要 C 链接器(VS Build Tools 或自带 mingw;
rust/build.bat已支持探测 GNU 工具链免 VS 构建) - 适合:日常高频桌面检索、对启动速度与分发体积敏感的用户。 详见 rust/README.md。
快速上手(Windows)
:: Python 版(需 Python >= 3.8,首次运行自动安装依赖)
python\start.bat
:: Go 版(需 Go >= 1.22):编译三入口到 go\bin\
cd go && build.bat
:: Rust 版(需 Rust 工具链):编译 CLI + 桌面版到 rust\target\release\
cd rust && build.bat
预编译产物位置:
| 产物 | 位置 |
|---|---|
| Go 三件套 | go\bin\excel-search-desktop.exe / excel-search-webui.exe / excel-searcher.exe |
| Rust 两件套 | rust\target\release\excel-search-rust.exe / excel-search-rust-desktop.exe |
| Python 单文件 exe | python\dist\Excel关键字搜索工具.exe(历史构建,重打包方法见 python/README.md) |
三版本共同的行为约定
- CSV 导出格式(语义一致):UTF-8 带 BOM;CRLF 行尾;所有列一律双引号包裹, 字段内部双引号转义为两个双引号(RFC 4180),含逗号/换行/引号的字段不会裂列。
- 导出列随各版本界面表格所见即所导: Python 为文件级 5 列(文件名/路径/大小/修改时间/匹配数); Go 与 Rust 为命中级 5 列(序号/文件路径/类型/Sheet 位置/匹配内容)。
- 缓存互通:Go 与 Rust 的结果缓存同 schema(
.cache/),搜索历史共用.cache/search_history.json;Python 独立存放于python/.index/。 - 搜索选项语义对齐:区分大小写 / 完整单词 / 子目录递归 / 文件类型过滤 (各版本支持的格式集合略有差异,见上表)。
构建环境总览
| 版本 | 运行环境 | 构建需求 | 一键脚本 | 手工命令 |
|---|---|---|---|---|
| Python | Python >= 3.8 + requirements.txt | 无需编译 | python\start.bat |
python main.py |
| Go | 无 | Go >= 1.22 | go\build.bat / make build |
go build ./cmd/... |
| Rust | 无 | Rust + C 链接器 | rust\build.bat |
cargo build --release |
每个版本的完整文件清单、构建步骤、测试与打包方法,详见各自目录下的 README。
截图预览
| 版本 | 检索中 | 检索完成 |
|---|---|---|
| Python | ![]() |
![]() |
| Go | ![]() |
![]() |
| Rust | ![]() |
![]() |





