Files
xls_doc/README.md
2026-06-18 20:03:47 +08:00

145 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# docfill
`docfill` 是一个最小化本地填报工具:从 Excel 或 SQLite 读取数据,把 `{{字段名}}` 填入 Word/Excel 模板,生成输出文件。
## Build
```bash
go build -o docfill ./cmd/docfill
bash scripts/build.sh
```
`scripts/build.sh` writes the local macOS arm64 binary to `dist/docfill-darwin-arm64`.
## Run
```bash
./docfill run --config task.json
./docfill run -c task.json --var date=2026-06-18 --var batch=早班
```
成功时 stdout 输出生成文件清单:
```text
generated 2 file(s)
- /path/to/out/report_张三.xlsx
- /path/to/out/report_李四.xlsx
```
退出码:
- `0`: 成功。
- `1`: 配置、数据、模板或输出失败。
- `2`: 命令行参数错误。
## Run Case Tests
```bash
go test -run TestCase -v ./internal/docfill
```
当前案例覆盖:
- Excel 日报数据填 Excel 模板,批量生成个人日报。
- SQLite 日报数据填 Word 模板,批量生成个人日报。
- SQLite 汇总数据填 Excel 模板,批量生成部门汇总表。
## Smoke Test
```bash
bash scripts/smoke.sh
```
Smoke test 会:
- 跑全量 Go 测试。
- 构建临时 `docfill` 二进制。
- 复制 `examples/` 到临时目录。
- 生成临时 Excel、Word、SQLite 示例数据。
- 执行两个示例任务并检查输出文件。
## Digital Employee Runbook
给数字员工或调度脚本使用时,看:
- `docs/digital-employee-runbook.md`
## Runnable Examples
示例配置在 `examples/`
- `examples/excel-to-word/task.json`
- `examples/sqlite-to-excel/task.json`
示例里的二进制 Office/SQLite 文件由 `scripts/smoke-fixtures` 临时生成,不提交到仓库。
## Excel Data Example
```json
{
"vars": {
"date": "2026-06-18"
},
"data": {
"type": "excel",
"path": "./data.xlsx",
"sheet": "Sheet1",
"header_row": 1
},
"template": {
"path": "./template.docx"
},
"output": {
"path": "./out/report_{{date}}_{{name}}_{{_row}}.docx",
"overwrite": false
}
}
```
Excel 第一行是字段名,后续每一行生成一个文件。
## SQLite Data Example
```json
{
"vars": {
"date": "2026-06-18"
},
"data": {
"type": "sqlite",
"path": "./data.db",
"query": "select name, date, done from daily_report where date = ?",
"params": ["{{date}}"]
},
"template": {
"path": "./template.xlsx"
},
"output": {
"path": "./out/report_{{name}}_{{_row}}.xlsx"
}
}
```
SQL 查询结果的列名就是模板占位符字段名。
## P0 Rules
- 配置里的相对路径按 `task.json` 所在目录解析。
- `vars` 可以提供默认变量,命令行 `--var key=value` 会覆盖同名默认变量。
- 模板填充时,每行数据字段优先于 `vars`
- `_row` 是内置变量,表示当前数据行序号,从 `1` 开始。
- SQLite `params` 对应 SQL 里的 `?` 参数。
- Excel `header_row``1` 开始,默认是 `1`
- 默认不覆盖已有输出文件;只有 `output.overwrite: true` 才允许覆盖。
- 输出文件路径中的字段值会清理 `/ \ : * ? " < > |`
- 模板里缺字段或渲染后仍有 `{{字段}}`,会直接失败。
- Word 模板支持同一段落内被拆开的文本占位符,例如 `{{na``me}}` 位于相邻文本节点。
## MVP Limits
- 只支持 JSON 配置。
- 只支持 `.xlsx` 数据源、SQLite 数据源。
- 只支持 `.docx``.xlsx` 模板。
- Word 占位符拆分只做最小兼容:支持同一段落内的文本节点拆分,不做复杂表格循环或样式级模板语法。
- 不做 Web、权限、审批流、模板设计器或业务系统直连。