weekdate — 周报表生成器
把"用户给的周报文本"变成"与已审核模板结构一致"的 Excel 周报。确定性部分由
scripts/generate_weekly_report.py 完成;理解用户输入、决定客户归类由 agent 完成。
何时使用
- 用户发来一段周报(更新要点 / 客户维度总结 / 每日拜访详情),要求输出成表格
- 要求文件名形如
A20260815.xlsx(A + 当天/当周日期) - 要求格式"与某张已填好的表无异"
输入契约(用户提供)
用户给的是自由文本,通常包含:
1. 更新要点(起止日期) —— 编号列表,每条一个客户/事件
2. 完整总结 → 一、按客户维度总结(表格:品牌 | 客户信息 | 跟进阶段 | 业务机会)
3. 二、每日拜访详情及需求结果(周一~周五 bullet 列表)
agent 负责把它解析成 data.json(见 references/EXAMPLE_IO.md 的字段说明)。
输出契约(硬性规则,必须照做)
- 文件名:
A<YYYYMMDD>.xlsx,日期取周报所属周(用户未指定时用当天日期) - 列映射(每个客户行):
- C 列 = 品牌名称
- D 列 = 客户信息 = 职位 / 省份(例如"媒介""采买""VP""董事总经理""2B业务副总")
- E 列 = 跟进阶段,必须严格使用 15 项固定下拉之一(见下)
- F 列 = 业务机会:默认
客户信息:{描述};业务机会:{机会点};
若 data.json 中该客户带f_text字段(agent 融合网络背景与用户信息撰写的人话文本),则直接写入f_text,用于去除刻板格式、输出给人看的自然叙述 - 跟进阶段 15 项固定格式(一字不差,缺省用第 4 项):
1.待接触/待联系, 2.初步对接/提供资料, 3.多次拜访/长期联系, 4.明确需求, 5.定制方案, 6.方案沟通, 7.协商议价, 8.选点&锁点确认, 9.合同签订, 10.执行上画, 11.上刊报告输出, 12.结案报告输出, 13.开票催款, 14.合作完成, 15.复购客户 - 两区划分(高自由度判断):
- 客户拜访区:已在跟进/复购/老客户深挖(如"老客户回访""复购洽谈")
- 新增意向客户区:明确标注"新增客户/新客户"或本周新接触
- 非"老客回访/新客拜访"的杂类归类(用户 2026-09-05 确认):
- 追款 / 催款 → 客户拜访区(属既有合作,非新机会)
- 广告公司代沟通、竞标中 → 新增意向客户区(本周新接触的机会)
- "沟通中 / 初期沟通" → 新增意向客户区(尚未形成稳定跟进关系)
- "状态转化"块优先级最高:若用户文本里出现"X:从 A 转为 B"这类转化描述,
一律以转化后的最新状态 B 判定归类与阶段,不要用首次出现的旧状态 A。 - 非标准阶段标签 → 15 项下拉映射表(用户常给的不是 15 项原文,按此表映射):
| 用户标签 | 映射到 |
|---|---|
| 初期沟通 / 决策人未接触(新客户) |2.初步对接/提供资料|
| 决策人未接触(老客户,已有多次接触) |3.多次拜访/长期联系|
| 预算未批 |4.明确需求|
| 方案整理 |5.定制方案|
| 探讨中 |6.方案沟通|
| 竞标中 / 竞品介入 |7.协商议价|
| 追款·跟催中 |13.开票催款|
| 已结案 / 闭环 |14.合作完成|
| 无机会(框架限制等) |1.待接触/待联系|
| 方案讲解 / 方案推荐 / 方案制定(已提交方案并讲解) |6.方案沟通|
| 商务谈判(已进入下单/价格谈判) |7.协商议价|
| 合同准备 / 合同已寄出 |9.合同签订|
| 收款 / 发票收款 / 推进(上刊后转结算) |13.开票催款|
| 高层对接(已触达决策层、长期关系) |3.多次拜访/长期联系|
| 执行中 / 已拍照(上刊监测环节) |10.执行上画|
| 沟通中(新客户、无细节) |2.初步对接/提供资料|
| 沟通中(老客户、已谈下一品类/具体方案) |6.方案沟通|
| 合作伙伴(媒介代理,协同提案) |6.方案沟通(区块按用户指定,可放新增区) | - 可增加/删除行以容纳实际客户数量(脚本已支持动态行数)
- 同客户跨周阶段应向前推进:若本周状态明显晚于上周(如上周
10.执行上画→ 本周
"发票收款" 应改13.开票催款;上周6.方案沟通→ 本周 "已报价并选点" 应改
7.协商议价),必须改阶段并在交付说明里点出改动,不要沿用上周阶段。
执行流程
- 读取用户文本,解析为
data.json(字段见 references/TEMPLATE_SPEC.md 与 EXAMPLE_IO.md) - 运行生成器。必须用受管 venv 的 Python(受管的
binaries/python/versions/3.13.12/python.exe
没有装 openpyxl,会直接 ModuleNotFoundError):
C:/Users/wolf2/.workbuddy/binaries/python/envs/default/Scripts/python.exe \ scripts/generate_weekly_report.py --data data.json --output A<日期>.xlsx
若该 venv 也缺 openpyxl,先装:
C:/Users/wolf2/.workbuddy/binaries/python/envs/default/Scripts/pip.exe install openpyxl
- 默认模板为内嵌的references/template_b64.json(已审核通过的 A20260815.xlsx 的 base64,作样式基准),可用--template覆盖
- 可用--owner指定工作表名(默认 胡兆基) - 用 openpyxl 复核:内容/合并单元格与预期一致,下拉挂载在 E 列
present_files交付 xlsx
行高规则(v1.3.0 起:自适应,不再锁死 54pt)
已审核模板 A20260815.xlsx 的 F 列文本只有 31–52 字、行高 23.2pt;但实际周报的 F 列
(业务机会)常有 200–380 字。旧版把客户行统一锁死 54pt,会裁切掉约 2/3 内容(Excel/WPS
不会自动撑开固定行高)。现改为按文本长度自适应:
- 客户行:行高 = max(54, ceil(len(F)/每行中文字数) × 14 + 4)
- 每行中文字数 ≈ 列宽 / 2(F 列宽 48.9 → 约 24 字/行)
- 规划行:取「内容(B:C 合并区)」「预计达成目标(D:F 合并区)」两者所需行高的较大值,下限 42
- 帮助块(A:F 合并跨 4 行):按 A–F 合计宽度算所需总高,再均分到各合并行,下限 42
副作用:长文本周报的表格总高度显著增加(本次 20 客户行 → 约 3,700pt)。
若用户希望回到模板的「短文本 + 统一行高」风格,应改为把 F 列压到 1–2 句(约 120 字内),
而不是把行高改回 54——两者只能选一个,需向用户确认。
首次使用向导(premium setup)
若 <workspace>/.skill-config/weekdate.json 不存在,询问 3–5 项并写入配置:
1. 输出目录(默认 D:/BaiduNetdiskDownload/Other/皓邻/日常报告/2026)
2. 默认负责人/工作表名(默认 胡兆基)
3. 上周目标完成数量默认值(默认 10)
4. 样式模板路径(默认内嵌 references/template_b64.json,可指定外部 xlsx 覆盖)
写完后用一条最小数据跑通自测。用户说"配置/重新配置"时重跑向导。
参考
- references/TEMPLATE_SPEC.md — 精确行布局、合并规则、样式来源
- references/EXAMPLE_IO.md — 真实输入文本 → data.json → 输出的完整示例
- references/template_b64.json — 内嵌 base64 样式基准(已审核通过的 A20260815.xlsx 副本,生成器运行时还原为临时 xlsx 作 donor)