智能表格 → 在线表格 映射填充
把一张"来源智能表格"的记录,按业务分类拆分写入"目标在线表格"的多个子表,同时复刻表头样式、加边框、按列填色、把图片嵌入单元格,并逐格回读校验。
何时使用
- 用户给出两个企业微信文档链接:一个
/smartsheet/(来源),一个/sheet/(目标),要求"映射填写/搬运数据/生成运营表" - 目标表格是空模板,需要按"招商中心 / 商品中心 / 福利品 / 取消"这类工作表拆分
- 需要在在线表格里插入商品图片、保留行高/字体/填色/边框
- 需要"只填通过/不通过"这类受控词表的列(枚举收敛)
前置
wecom-cli --version≥ 1.2.1(内置 custom-auth 版本,不要安装公共版覆盖)python可用;不需要 openpyxl- 先阅读
references/cli-notes.md(命令与坑),再按references/mapping-spec.md建映射
标准流程
第 1 步:读目标模板,产出"模板标准"给用户确认
wecom-cli sheet get --json '{"docid":"<目标docid>"}'
wecom-cli sheet cells get --json '{"docid":"<docid>","sheet":"<sheet_id>","range":"A1:<末列>1","include":["style"]}'
wecom-cli sheet info get --json '{"docid":"<docid>","sheet":"<sheet_id>","include":["merges","row_heights","col_widths"]}'
要报告给用户的内容:子表清单与列数、表头行高、字体/字号/加粗/字色/对齐/换行、每列列宽、每列表头底色(底色往往按业务分组,是"哪几列该填什么色"的依据)、数据区是否为空。
第 2 步:读来源字段与样本,产出"映射关系"给用户确认
wecom-cli smartsheet sheets list --json '{"docid":"<来源docid>"}'
wecom-cli smartsheet fields list --json '{"docid":"<docid>","sheet_title":"<子表>","limit":200}'
wecom-cli smartsheet records list --json '{"docid":"<docid>","sheet_title":"<子表>","limit":100}'
映射必须分三类说清楚:直接搬运、需转换(含规则)、无来源(留空待人工补)。同时给出源字段的填充率,让用户知道哪些列填出来会是空的。
第 3 步:确认口径(一次问全)
典型待确认项:填写范围(哪些子表 / 哪些记录)、图片是"写 URL"还是"嵌入图片"、数据行样式、佣金/百分比口径、序号口径、特殊列的受控词表、是否需要边框与填色。
第 4 步:生成计划
python scripts/build_plan.py --config configs/<your-config>.json --out plan.json
脚本会分页拉全部记录、按 tabs[].match 分类、按 columns/transforms/images 生成每个子表的二维数组,并打印每表行数与图片数。先看数字对不对,再写。
第 5 步:写入
python scripts/write_tab.py --config configs/<your-config>.json --plan plan.json --tab 招商中心
脚本按顺序执行:值+图片(分块)→ 行高 → 字体样式 → 边框 → 指定列填色。行数不够时会自动扩行。
第 6 步:回读校验
python scripts/verify_tab.py --config configs/<your-config>.json --plan plan.json --tab 招商中心
逐格比对值与图片,并抽查行高。差异必须为 0 才算完成;出现个别空格时用 cells batchset 单格补写后重新校验。
关键规则(本项目沉淀)
- 分类优先级:取消 > 挂链 > 福利品 > 按编号前缀分招商/商品,最后按
skip_if_no丢掉全空行 - 序号:按来源顺序 1..N 重排,保证行序与来源一致
- 图片:
{"image": "<http url>"}写入即"嵌入单元格";优先取招商图,取不到再取商品图 - 受控词表列(如"品控"):只允许枚举值,源字段为空但有备注时归到"资料不全",全空则留空
- 百分比列:源值是浮点脏数据(如
28.000000000000004)时必须清洗后加% - 整列填色:用户说"整列填色(不含表头)"时,范围要写到
表尾行,不是只写到最后一个数据行
目录
references/cli-notes.md— 命令清单、参数、坑(缓存/上限/扩行)references/mapping-spec.md— 70 列标准映射与转换规则(可直接复用)configs/xueda-live-ops.json— 雪大直播运营表的现成配置scripts/build_plan.py/write_tab.py/verify_tab.py