Dr.SheetSplit 是一个基于 Tauri + Vue 3 + TypeScript + Python 的桌面端表格拆分工具。 你可以通过可视化规则把一个源表按业务条件拆分为多个工作表/工作簿,并支持映射转换、表达式计算、本地持久化和自动更新。
- 可视化规则配置:创建、编辑、导入、导出规则
- 动态拆分:按分组字段输出多个 Sheet
- 映射管理:分组维护映射,支持 JSON/CSV/XLSX 导入导出
- 多种取值模式:来源字段、固定值、映射转换、多条件映射、聚合、表达式、日期格式化等
- 本地持久化:规则、映射、历史记录、界面设置
- 自动更新:检查更新、下载并安装
- 多语言:简体中文 / English
- 前端:Vue 3 + TypeScript + Vite + Vue Router + Vue I18n
- 桌面端:Tauri 2
- 规则引擎:Python(
src-tauri/python/transform_engine.py) - 表格处理:SheetJS (
xlsx) - 本地存储:
- 规则:SQLite(
rules.db) - 历史:SQLite(
history.db) - 映射:Tauri Store(
settings.json)
- 规则:SQLite(
- Node.js 18+(建议 20+)
- pnpm
- Rust(含 cargo)
- Tauri 系统依赖(按官方文档安装)
- Python 3(仅开发调试可选;发布包使用内置运行时)
可选环境变量(开发调试时指定解释器):
export DR_SHEETSPLIT_PYTHON=/usr/local/bin/python3pnpm installpnpm tauri devpnpm build
pnpm tauri build发布包采用内置 Python 运行时(最终用户无需安装 Python)。 打包前请放置对应平台可执行文件:
- macOS:
src-tauri/python/runtime/macos/bin/python3 - Windows:
src-tauri/python/runtime/windows/python.exe
说明:
release构建会校验上述路径,缺失时会直接失败dev模式仍允许回退系统 Python
已提供工作流:.github/workflows/release-build.yml
- 手动触发:GitHub Actions 页面运行
Release Build - 自动触发:推送版本标签(如
v1.0.1) - 产物:分别上传
macOS、Windows的src-tauri/target/release/bundle目录
说明:
- CI 会自动准备内置 Python 运行时(来自
actions/setup-python) - 如需本地复用同逻辑,可运行:
python scripts/prepare_bundled_python.py --platform macospython scripts/prepare_bundled_python.py --platform windows
当前支持的输出取值方式:
source:来源字段constant:固定值mapping:单字段映射转换mapping_multi:多条件映射转换(字段1+字段2+...)conditional_target:条件字段分流aggregate_sum:组内求和aggregate_sum_divide:逐行相除后求和aggregate_join:组内拼接copy_output:复制已产出字段format_date:日期格式化expression:表达式计算
表达式示例:
sum("采购数量") / sum("采购规格")
join_unique("采购单号", "\\n")
详细说明见:RULE_ENGINE.md
支持导入:
- JSON
- CSV
- XLSX / XLS
要求:
- 需要可识别
source/target列 - JSON 支持:
- 数组对象:
[{ "source": "A", "target": "B" }] - 键值对象:
{ "A": "B" }
- 数组对象:
备注:首次安装默认没有预置映射数据,映射内容由用户自行维护。
- 规则:
rules.db - 历史:
history.db - 映射:
settings.json(mappingGroups) - 外观/语言/导入导出设置:
localStorage
已接入 @tauri-apps/plugin-updater,默认更新地址:
将截图放到 screenshots/ 后,README 会自动显示。当前使用以下文件名:
.
├─ src/ # 前端源码
│ ├─ components/ # 业务组件
│ ├─ pages/ # 主页面与编辑器页面
│ ├─ services/process/ # 处理流程编排
│ ├─ store/ # 状态与本地存储访问
│ ├─ utils/ # 校验、解析等工具
│ ├─ composables/ # 组合式逻辑
│ └─ locales/ # i18n 文案
├─ src-tauri/
│ ├─ src/lib.rs # Tauri 命令与后端桥接
│ ├─ python/ # Python 引擎与运行时资源
│ └─ tauri.conf.json # 打包、窗口、更新配置
├─ README.md
└─ LICENSE
通常是已有 Vite/Tauri 进程占用 1420,结束旧进程后重试。
优先检查打包时是否包含内置运行时路径(见打包发布)。
检查「设置 -> 导入导出 -> 允许导入文件格式」是否包含对应扩展名。
如果出现“你应该将它移到废纸篓”的提示,可在终端执行:
xattr -rd com.apple.quarantine /Applications/Dr.SheetSplit.app欢迎通过 Issue 和 Pull Request 参与贡献。
提交前请先搜索是否已有相同问题。新建 Issue 时建议包含:
- 问题描述与预期行为
- 复现步骤
- 运行环境(操作系统、应用版本)
- 错误日志或截图(如有)
- Fork 仓库并创建分支(示例:
feat/multi-field-mapping、fix/history-scrollbar) - 安装依赖:
pnpm install - 本地开发:
pnpm tauri dev - 构建检查:
pnpm build - 提交代码并发起 Pull Request
建议使用 Conventional Commits,例如:
feat(rules): add multi-field mapping modefix(ui): hide sidebar history scrollbardocs(readme): improve contribution guide
- 标题清晰说明变更目标
- 描述包含:变更内容、原因、影响范围
- 涉及 UI 调整时附截图或录屏
- 通过基础构建检查(至少
pnpm build) - 保持单一主题,避免把无关改动混入同一个 PR
若发现安全漏洞,请不要公开提交 Issue。请通过仓库维护者联系方式私下通知。
请保持尊重、专业、可协作的沟通方式。
本项目采用 The Unlicense,详见 LICENSE。



