Install
openclaw skills install pm-weekly-report-update将项目经理提交的原始 Excel 周报数据同步到乐荐飞书表格。当项目经理发送周报 Excel 文件、要求更新周收入数据、核对周报数据时激活。
openclaw skills install pm-weekly-report-update项目经理周报数据同步技能。
目标飞书表格配置存储在 env.vars 下,使用扁平 key:
| 字段 | 说明 |
|---|---|
env.vars.pm_feishu_sheet_token | 飞书表格 token |
env.vars.pm_feishu_sheet_sheet_id | Sheet ID |
env.vars.pm_feishu_sheet_url | 完整 URL |
⚠️ 注意:配置系统不支持嵌套格式(如
pm_feishu_sheet.token),写入时会自动拍扁为pm_feishu_sheet_token。读取时必须使用上述扁平 key。
读取配置(无默认值,配置不存在时为空):
openclaw config get env.vars.pm_feishu_sheet_token
openclaw config get env.vars.pm_feishu_sheet_sheet_id
openclaw config get env.vars.pm_feishu_sheet_url
写入配置(每次只写一个字段):
openclaw config set env.vars.pm_feishu_sheet_token "你的token"
openclaw config set env.vars.pm_feishu_sheet_sheet_id "你的sheet_id"
openclaw config set env.vars.pm_feishu_sheet_url "完整URL"
严禁使用覆盖整个 JSON 的方式写入配置。
https://lejian.feishu.cn/wiki/RgS0wyoEdisDOCkXE0icPWBPnoe?sheet=NdGNM7)token、sheet_id、完整 urlopenclaw config set env.vars.pm_feishu_sheet.token "RgS0wyoEdisDOCkXE0icPWBPnoe"
openclaw config set env.vars.pm_feishu_sheet.sheet_id "NdGNM7"
openclaw config set env.vars.pm_feishu_sheet.url "https://lejian.feishu.cn/wiki/RgS0wyoEdisDOCkXE0icPWBPnoe?sheet=NdGNM7"
openclaw config get env.vars.pm_feishu_sheet.token 读取 tokensheet_id 和 url 用于后续操作如果用户发送了新的飞书表格 URL,视为重新配置提示,重复流程1逐字段更新。
飞书表格 URL 格式:
/wiki/):https://*.feishu.cn/wiki/TOKEN?sheet=SHEET_ID
token = ?sheet= 前面的路径部分(如 RgS0wyoEdisDOCkXE0icPWBPnoe)sheet_id = ?sheet= 后面的部分(如 NdGNM7)url = 原始 URL 整体/sheets/):https://feishu.cn/sheets/shtcnABC123
token = 路径最后一段(如 shtcnABC123)sheet_id = 从 URL 中找 sheet= 参数;无则调用 meta 获取第一个 sheet判断逻辑:
/wiki/ → Wiki 格式,直接解析 token + sheet_id/sheets/ → 标准格式,token 取路径最后一段,sheet_id 从参数读或调用 meta/wiki/ 也无 /sheets/ → 视为 token,sheet_id 待指定本技能依赖 lejian-feishu-sheet(飞书电子表格操作技能),必须先安装并配置才能正常工作。
安装依赖技能(如果尚未安装):
openclaw skills install lejian-feishu-sheet
飞书应用权限:你需要有一个乐荐的飞书应用,该应用需要开通「电子表格」编辑权限(sheets:spreadsheet),并将此飞书表格分享给该应用(编辑权限)。
配置飞书凭证:
openclaw config set channels.feishu.appId "你的appId"
openclaw config set channels.feishu.appSecret "你的appSecret"
如需重置本技能配置(只清除乐荐飞书表格配置,保留其他 env.vars):
openclaw config unset env.vars.pm_feishu_sheet_token
openclaw config unset env.vars.pm_feishu_sheet_sheet_id
openclaw config unset env.vars.pm_feishu_sheet_url
⚠️ 不要使用 openclaw config unset env.vars(会清除所有 env.vars,影响其他技能)。
配置完成后,发一次飞书表格链接(如 https://lejian.feishu.cn/wiki/RgS0wyoEdisDOCkXE0icPWBPnoe?sheet=NdGNM7),技能会自动解析并保存。
| Excel列索引 | Python变量名 | 飞书列对应 | 说明 |
|---|---|---|---|
| B(第1索引) | channel_name | 对应飞书G列 | 客户名称(规则2使用) |
| C(第2索引) | ops_channel_name | 对应飞书X列(重要!) | OPS渠道单位名称(规则1使用) |
| F(第5索引) | pe | 对应飞书E列 | 项目经理 |
| H(第7索引) | supply_price | — | 渠道供货价(要同步的周收入) |
| 飞书列 | 列名 | 说明 |
|---|---|---|
| B | 区域 | |
| C | 总监 | |
| D | 销售 | |
| E | PM(项目经理) | 匹配 Excel pe |
| F | 项目唯一标识 | |
| G | 项目名称 | 匹配 Excel channel_name |
| X | OPS渠道单位名称 | 匹配 Excel ops_channel_name(规则1) |
| CS~CW | 周收入列 | 第1-5周数据 |
⚠️ 关键映射:
- Excel
ops_channel_name(C列)→ 飞书 X列(不是G列)- Excel
channel_name(B列)→ 飞书 G列(规则2使用)
| 规则 | Excel字段 | 飞书字段 | 优先级 |
|---|---|---|---|
| 规则1 | ops_channel_name(C列) | X列 | 最高 |
| 规则2 | channel_name(B列)+ pe(F列) | G列 + E列 | 降级 |
| 飞书列 | 内容 | 说明 |
|---|---|---|
| B | 区域 | |
| C | 总监 | |
| D | 销售 | |
| E | PM(项目经理) | ← 匹配 Excel F列 |
| F | 项目唯一标识 | |
| G | 项目名称 | ← 匹配 Excel B列 |
| X | OPS渠道单位名称 | ← 匹配 Excel C列(重要!) |
| CS | 第1周(4/1-4/5) | |
| CT | 第2周(4/6-4/12) | |
| CU | 第3周(4/13-4/19) | |
| CV | 第4周(4/20-4/26) | |
| CW | 第5周(4/27-4/30) |
数据从第3行开始。第2行是表头。
详见 references/match-rules.md。
优先级:
ops_channel_name(C列)== 飞书 X列(OPS渠道单位名称)→ 直接命中channel_name + pe 联合定位飞书 G列+E列,按 2.1精确 → 2.2前缀剥离 → 2.3双向包含 依次尝试别名支持: 系统支持项目别名映射,例如 享道出行/赛可出行 → 享道汽车。别名在所有规则中均生效。
匹配失败处理: 规则1失败 → 降级规则2;规则2某一子级失败 → 降级下一级;全部失败 → 报错
报错信息: 未找到项目 [channel_name] + PM [pe] 的行,请确认该项目的周报已添加到此表格
Sheet 名:UUID 风格(如 d2721d4c-95a5-4d8c-bc12-668050f)
| 列索引 | Python变量名 | 列名 | 说明 |
|---|---|---|---|
| B(第1索引) | channel_name | 客户名称 | 规则2使用 |
| C(第2索引) | ops_channel_name | OPS渠道单位名称 | 规则1匹配字段(最高优先级) |
| F(第5索引) | pe | 项目经理 | 匹配飞书E列 |
| H(第7索引) | supply_price | 渠道供货价 | = 要同步的周收入 |
⚠️ openpyxl 的 row 数组是 0-based 索引(Python list):A=index0, B=index1, ..., H=index7
调用 openclaw config get env.vars.pm_feishu_sheet.token 读取配置。
文件名格式:xxx_2026_0420-0426---uuid.xlsx
| 日期区间(MMDD) | 对应列 |
|---|---|
| 0401-0405 | CS |
| 0406-0412 | CT |
| 0413-0419 | CU |
| 0420-0426 | CV |
| 0427-0430 | CW |
从文件名提取 MMDD-MMDD 区间,匹配上表确定目标列。
读取 Sheet 1,从第2行起,提取:
channel_name(B列)ops_channel_name(C列)pe(F列)supply_price(H列)按 references/match-rules.md 中的规则依次尝试匹配:
ops_channel_name(C列) == 飞书 X列(最高优先级)channel_name + pe 联合定位飞书 G列+E列(2.1精确 → 2.2前缀剥离 → 2.3双向包含)全部失败 → 报错。
使用 lejian-feishu-sheet 的 write 命令,token/sheet_id 从配置读取:
TOKEN=$(openclaw config get env.vars.pm_feishu_sheet.token)
SHEET_ID=$(openclaw config get env.vars.pm_feishu_sheet.sheet_id)
OPENCLAW_CONFIG=~/workspace/agent/openclaw.json \
~/workspace/agent/skills/lejian-feishu-sheet/scripts/feishu-sheet.sh \
write "$TOKEN" "${SHEET_ID}!CV5:CV5" '[[159468.66]]'
脚本执行后输出结构化 JSON,包含以下字段:
{
"week_col": "CV", // 本次更新的周次列
"updates": [ // 成功匹配的记录列表(包含写入和跳过)
{
"channel": "某科技公司", // Excel channel_name(B列)
"ops_channel_name": "2026某科技公司", // Excel OPS渠道单位名称(C列)
"pe": "张三", // PM(项目经理)
"row": 17, // 飞书表格目标行号
"col": "CV", // 周次列
"value": 35792, // 本次写入的供货价
"rule": "规则1", // 命中的匹配规则
"status": "ok" // 状态:ok=成功写入, skipped=跳过
}
],
"errors": [ // 匹配失败的记录列表
"未找到项目 [某渠道](2025某渠道名)+ PM [李四] 的行"
]
}
输出要求:
week_col 必须标注本次更新的周次列(如 CV=第4周)updates 中的每条记录必须包含:channel、ops_channel_name、pe、row、col、value、ruleerrors 中每条错误信息必须包含:项目名(channel_name)、OPS渠道单位名称(ops_channel_name)和 PM| 情况 | 处理 |
|---|---|
| 无飞书表格配置 | 请用户发送飞书表格 URL,分析后写入配置 |
| 文件名无法解析周次 | 报错:「无法识别文件名中的日期,请确认格式如 xxx_2026_0420-0426---uuid.xlsx」 |
| 项目行未找到 | 报错:「未找到项目 [某公司] + PM [某PM] 的行,请确认该项目的周报已添加到此表格」 |
| 渠道供货价为0或空 | 跳过该行(不写入),并在结果中说明「[某公司] 无渠道供货价数据(0),已跳过」 |
| 找到多个匹配行 | 报错:「匹配到多行,请检查数据:[行号1] [行号2]」 |
channels.feishu.appId / channels.feishu.appSecret)