@amaster.ai/pi-lark 0.1.2-beta.73 → 0.1.2-beta.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -4
- package/skills/lark-apps/SKILL.md +1 -0
- package/skills/lark-apps/references/lark-apps-env-pull.md +1 -1
- package/skills/lark-apps/references/lark-apps-env.md +1 -1
- package/skills/lark-apps/references/lark-apps-export.md +62 -0
- package/skills/lark-apps/references/lark-apps-observability.md +1 -1
- package/skills/lark-base/SKILL.md +3 -3
- package/skills/lark-base/references/lark-base-app.md +1 -1
- package/skills/lark-base/references/lark-base-dashboard-block-config.md +20 -2
- package/skills/lark-base/references/lark-base-dashboard.md +1 -1
- package/skills/lark-base/references/lark-base-data-query.md +1 -1
- package/skills/lark-base/references/lark-base-field-create.md +1 -1
- package/skills/lark-base/references/lark-base-field-update.md +1 -1
- package/skills/lark-base/references/lark-base-form-questions-create.md +1 -1
- package/skills/lark-base/references/lark-base-form-questions-update.md +1 -1
- package/skills/lark-base/references/lark-base-form-submit.md +1 -1
- package/skills/lark-base/references/lark-base-view-set-filter.md +1 -1
- package/skills/lark-base/references/lark-base-view.md +109 -0
- package/skills/lark-doc/references/lark-doc-media-download.md +1 -1
- package/skills/lark-doc/references/lark-doc-media-insert.md +1 -1
- package/skills/lark-doc/references/lark-doc-media-preview.md +1 -1
- package/skills/lark-doc/references/lark-doc-resource-cover.md +1 -1
- package/skills/lark-drive/references/lark-drive-add-comment.md +1 -1
- package/skills/lark-drive/references/lark-drive-apply-permission.md +1 -1
- package/skills/lark-drive/references/lark-drive-copy.md +1 -1
- package/skills/lark-drive/references/lark-drive-cover.md +1 -1
- package/skills/lark-drive/references/lark-drive-create-folder.md +1 -1
- package/skills/lark-drive/references/lark-drive-create-shortcut.md +1 -1
- package/skills/lark-drive/references/lark-drive-delete.md +1 -1
- package/skills/lark-drive/references/lark-drive-download.md +1 -1
- package/skills/lark-drive/references/lark-drive-export-download.md +1 -1
- package/skills/lark-drive/references/lark-drive-export.md +1 -1
- package/skills/lark-drive/references/lark-drive-import.md +1 -1
- package/skills/lark-drive/references/lark-drive-inspect.md +1 -1
- package/skills/lark-drive/references/lark-drive-list-comments.md +1 -1
- package/skills/lark-drive/references/lark-drive-move.md +1 -1
- package/skills/lark-drive/references/lark-drive-preview.md +1 -1
- package/skills/lark-drive/references/lark-drive-pull.md +1 -1
- package/skills/lark-drive/references/lark-drive-push.md +1 -1
- package/skills/lark-drive/references/lark-drive-search.md +1 -1
- package/skills/lark-drive/references/lark-drive-status.md +1 -1
- package/skills/lark-drive/references/lark-drive-task-result.md +1 -1
- package/skills/lark-drive/references/lark-drive-update-title.md +1 -1
- package/skills/lark-drive/references/lark-drive-upload.md +1 -1
- package/skills/lark-drive/references/lark-drive-version-delete.md +1 -1
- package/skills/lark-drive/references/lark-drive-version-get.md +1 -1
- package/skills/lark-drive/references/lark-drive-version-history.md +1 -1
- package/skills/lark-drive/references/lark-drive-version-revert.md +1 -1
- package/skills/lark-im/references/lark-im-chat-create.md +1 -1
- package/skills/lark-im/references/lark-im-chat-list.md +1 -1
- package/skills/lark-im/references/lark-im-chat-members-list.md +1 -1
- package/skills/lark-im/references/lark-im-chat-messages-list.md +1 -1
- package/skills/lark-im/references/lark-im-chat-search.md +1 -1
- package/skills/lark-im/references/lark-im-chat-update.md +1 -1
- package/skills/lark-im/references/lark-im-feed-groups.md +1 -1
- package/skills/lark-im/references/lark-im-feed-shortcut-create.md +1 -1
- package/skills/lark-im/references/lark-im-feed-shortcut-list.md +1 -1
- package/skills/lark-im/references/lark-im-feed-shortcut-remove.md +1 -1
- package/skills/lark-im/references/lark-im-flag-cancel.md +1 -1
- package/skills/lark-im/references/lark-im-flag-create.md +1 -1
- package/skills/lark-im/references/lark-im-flag-list.md +1 -1
- package/skills/lark-im/references/lark-im-message-enrichment.md +1 -1
- package/skills/lark-im/references/lark-im-message-read-status.md +1 -1
- package/skills/lark-im/references/lark-im-messages-edit.md +1 -1
- package/skills/lark-im/references/lark-im-messages-mget.md +1 -1
- package/skills/lark-im/references/lark-im-messages-reply.md +1 -1
- package/skills/lark-im/references/lark-im-messages-resources-download.md +1 -1
- package/skills/lark-im/references/lark-im-messages-search.md +1 -1
- package/skills/lark-im/references/lark-im-messages-send.md +1 -1
- package/skills/lark-im/references/lark-im-reactions.md +1 -1
- package/skills/lark-im/references/lark-im-threads-messages-list.md +1 -1
- package/skills/lark-mail/references/lark-mail-triage.md +1 -1
- package/skills/lark-mail/references/lark-mail-watch.md +1 -1
- package/skills/lark-markdown/references/lark-markdown-create.md +1 -1
- package/skills/lark-markdown/references/lark-markdown-diff.md +1 -1
- package/skills/lark-markdown/references/lark-markdown-fetch.md +1 -1
- package/skills/lark-markdown/references/lark-markdown-overwrite.md +1 -1
- package/skills/lark-markdown/references/lark-markdown-patch.md +1 -1
- package/skills/lark-sheets/SKILL.md +58 -173
- package/skills/lark-sheets/references/lark-sheets-batch-update.md +10 -10
- package/skills/lark-sheets/references/lark-sheets-chart.md +5 -5
- package/skills/lark-sheets/references/lark-sheets-conditional-format.md +4 -4
- package/skills/lark-sheets/references/lark-sheets-filter-view.md +1 -1
- package/skills/lark-sheets/references/lark-sheets-filter.md +2 -2
- package/skills/lark-sheets/references/lark-sheets-float-image.md +2 -2
- package/skills/lark-sheets/references/lark-sheets-formula-translation.md +90 -4
- package/skills/lark-sheets/references/lark-sheets-formula-verify.md +49 -13
- package/skills/lark-sheets/references/lark-sheets-pivot-table.md +13 -13
- package/skills/lark-sheets/references/lark-sheets-range-operations.md +12 -9
- package/skills/lark-sheets/references/lark-sheets-read-data.md +14 -12
- package/skills/lark-sheets/references/lark-sheets-search-replace.md +3 -3
- package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +8 -4
- package/skills/lark-sheets/references/lark-sheets-sparkline.md +2 -2
- package/skills/lark-sheets/references/lark-sheets-styles-put.md +2 -2
- package/skills/lark-sheets/references/lark-sheets-visual-standards.md +16 -16
- package/skills/lark-sheets/references/lark-sheets-workbook.md +22 -7
- package/skills/lark-sheets/references/lark-sheets-write-cells.md +66 -57
- package/skills/lark-sheets/scripts/lark_chart_quality_check.py +42 -26
- package/skills/lark-sheets/scripts/lark_chart_size_advisor.py +2 -1
- package/skills/lark-sheets/scripts/lark_inspect_workbook.py +37 -9
- package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +53 -0
- package/skills/lark-sheets/scripts/{sheets_df.py → lark_sheets_df.py} +1 -1
- package/skills/lark-slides/SKILL.md +11 -18
- package/skills/lark-slides/references/cli/lark-slides-create.md +3 -3
- package/skills/lark-slides/references/cli/lark-slides-delete-slide.md +1 -1
- package/skills/lark-slides/references/cli/lark-slides-history.md +1 -8
- package/skills/lark-slides/references/cli/lark-slides-media-upload.md +5 -10
- package/skills/lark-slides/references/cli/lark-slides-replace-slide.md +14 -15
- package/skills/lark-slides/references/cli/lark-slides-update-slide.md +2 -2
- package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md +3 -108
- package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md +6 -183
- package/skills/lark-slides/references/cli/lark-slides-xml-presentations-get.md +26 -143
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +3 -3
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +2 -2
- package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +2 -2
- package/skills/lark-slides/references/workflow/error-handling.md +3 -3
- package/skills/lark-slides/references/workflow/slides-editing.md +10 -11
- package/skills/lark-task/references/lark-task-assign.md +1 -1
- package/skills/lark-task/references/lark-task-comment.md +1 -1
- package/skills/lark-task/references/lark-task-complete.md +1 -1
- package/skills/lark-task/references/lark-task-create.md +1 -1
- package/skills/lark-task/references/lark-task-followers.md +1 -1
- package/skills/lark-task/references/lark-task-get-my-tasks.md +1 -1
- package/skills/lark-task/references/lark-task-get-related-tasks.md +1 -1
- package/skills/lark-task/references/lark-task-reminder.md +1 -1
- package/skills/lark-task/references/lark-task-reopen.md +1 -1
- package/skills/lark-task/references/lark-task-search.md +1 -1
- package/skills/lark-task/references/lark-task-set-ancestor.md +1 -1
- package/skills/lark-task/references/lark-task-tasklist-create.md +1 -1
- package/skills/lark-task/references/lark-task-tasklist-members.md +1 -1
- package/skills/lark-task/references/lark-task-tasklist-search.md +1 -1
- package/skills/lark-task/references/lark-task-tasklist-task-add.md +1 -1
- package/skills/lark-task/references/lark-task-update.md +1 -1
- package/skills/lark-task/references/lark-task-upload-attachment.md +1 -1
- package/skills/lark-wiki/references/lark-wiki-delete-space.md +1 -1
- package/skills/lark-wiki/references/lark-wiki-move-to-drive.md +1 -1
- package/skills/lark-wiki/references/lark-wiki-move.md +1 -1
- package/skills/lark-wiki/references/lark-wiki-node-create.md +1 -1
- package/skills/lark-sheets/references/lark-sheets-legacy-command-migration.md +0 -152
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lark-sheets
|
|
3
|
-
version: 3.
|
|
4
|
-
description: "
|
|
3
|
+
version: 3.5.2
|
|
4
|
+
description: "飞书电子表格:创建和操作电子表格。支持工作表与行列结构(增删/合并/尺寸/隐藏/冻结/分组)、单元格读写(值/公式/样式/批注/单元格图片)、区域复制移动排序填充、查找替换、批量更新,图表、透视表、条件格式、筛选器与筛选视图、下拉列表、迷你图、浮动图片等对象的创建与维护,以及公式校验、历史版本回滚、本地 Excel/CSV 与飞书表格的导入导出。当用户需要创建或编辑表格、统计汇总与可视化、表格美化、公式计算(含 Excel 公式迁移)、金融/财务建模(DCF、三张表、预算、Sensitivity 等)时使用。多维表格(Base/bitable)请改用 lark-base;若用户是想按名称或关键词搜索云空间(云盘/云存储)里的表格文件,请改用 lark-drive 的 drive +search 先定位资源。当用户给出 doubao.com 的 /sheets/ URL/token 时,也应直接使用本 skill,不要因为域名不是飞书而回退到 WebFetch;路由依据是 URL 路径模式和 token,而不是域名。"
|
|
5
5
|
metadata:
|
|
6
6
|
requires:
|
|
7
7
|
bins: ["lark-cli"]
|
|
@@ -13,146 +13,48 @@ metadata:
|
|
|
13
13
|
|
|
14
14
|
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),其中包含认证、权限处理。**
|
|
15
15
|
|
|
16
|
-
##
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
>
|
|
58
|
-
> 详细用法(flag、payload 形状、易错点)在本表后半部分与其后的「执行要点」「公共 flag」章节:
|
|
59
|
-
>
|
|
60
|
-
> `+styles-put` 美化收尾(样式 / 边框 / 合并 / 行高列宽 / **冻结** 一次交付)·
|
|
61
|
-
> `+chart-create` 原生图表 · `+pivot-create` 透视表 · `+filter-create` 筛选 ·
|
|
62
|
-
> `+cond-format-create` 条件格式 · `+range-sort` 排序 · `+dim-insert` 插入行列 ·
|
|
63
|
-
> `+cells-search` / `+cells-replace` 查找替换 · `+workbook-import` 本地文件转在线表
|
|
64
|
-
>
|
|
65
|
-
> 要用其中任一能力而对应行未读到时,**用文件读取工具的偏移参数(`offset` / 起始行)把后半段再读一次**,
|
|
66
|
-
> 取全对应行再动手。不要因为没读到展开就判定命令不存在,更不要改用本地脚本绕路——
|
|
67
|
-
> 本地生成的透视表 / 图表导入后会退化成死表、静态图。
|
|
68
|
-
|
|
69
|
-
把高频意图映射到**真实存在**的 shortcut / flag(agent 常从 Excel / Google Sheets / OpenAPI 误迁移命令名)。**选定命令后先读「动手前读」列指向的 reference 再动手**——命令名对得上不代表用法对。
|
|
70
|
-
|
|
71
|
-
| 你要做的事 | ✅ 正确写法 | 动手前读 | ❌ 不存在(会被 cobra 拒) |
|
|
72
|
-
| --- | --- | --- | --- |
|
|
73
|
-
| 读数据(纯值 / CSV) | `+csv-get`(`--range` 可省略 = 读整个子表,无需先探行列;限定范围才传) | `lark-sheets-read-data` | `+read-data`、`+get-range`、`+range-get`、`+cells-read` |
|
|
74
|
-
| 读值 + 公式 / 样式 / 批注 | `+cells-get --include value,formula,style,comment,data_validation` | `lark-sheets-read-data` | `+get-cell`、`+cell-get`、`--sheet`(定位只有 `--sheet-id` / `--sheet-name`)、`--value-only`、`--include-style`、`--value-render-option`、`--with-styles`、`--with-merges`、`--include-merged-cells` |
|
|
75
|
-
| 写纯文本值(整块 CSV 平铺;列里**没有**需字面保真的数值 / 日期标签 / 编号——点分日期 `12.10`、编号 `001` 会被 csv-put 数值化,不算纯文本) | `+csv-put`(定位用 `--start-cell`,单个左上角锚点格;也接受 `--range` 别名,区间自动取左上角) | `lark-sheets-write-cells` | 把含点分日期(`12.10`)/编号(`001`)的列裸灌 `+csv-put`——会被数值化(`12.10`→`12.1`、`001`→`1`,尾零/前导零丢失),改用 `+table-put` 声明 `dtypes:object` |
|
|
76
|
-
| 写带类型的数据到**已有**表(列里有数字 / 金额 / 百分比 / 日期 / 计数等**本质是量值**的数据——不看当下要不要排序 / 求和,量值一律走这里) | `+table-put --sheets` 完整 payload `{"sheets":[{...}]}`(列名走 `columns`、二维数据走 `data`、列 pandas dtype 走 `dtypes`、列展示格式走 `formats`;来源不限 DataFrame——Counter / dict / list 同理;要同时美化加 `--styles` 一步带样式(区域底色 / 边框 / 列宽 / 行高 / 合并),不必事后再刷;payload 里不存在的 sheet 名会自动建子表,详见 write-cells) | `lark-sheets-write-cells` | 在本地把数字拼成 `"$1,234"` / `"30.5%"` 字符串再 `+csv-put`(会落成文本、丢失计算能力;常见借口见下方 ⚠️) |
|
|
77
|
-
| **新建**电子表格并写带类型的数据(类型保真需求同上,但目标表还不存在) | `+workbook-create --sheets`(协议与 `+table-put` 同构、一步建表 + typed 写入,无需先建空表再 `+table-put`;date / number 不丢;`--styles` 同样可在建表同一步带全套样式,详见 workbook) | `lark-sheets-workbook` | 用 `--values` 灌日期 / 数字(会落成文本、丢类型) |
|
|
78
|
-
| 写公式 / 富写入(样式 · 批注 · 图片 · 富文本),或需精确矩形定位的值 | `+cells-set`(单区域 `--range`+`--cells`;**散布多处 / 跨表用 `--writes` 一次批量交付**,每项自带 sheet_name;批注 / 图片 / 富文本只能用它;公式落表后可用 `+formula-verify` 诊断) | `lark-sheets-write-cells` | — |
|
|
79
|
-
| 只改样式、值 / 公式不动 | `+cells-set-style`(单区域小改);多区域 / 整表美化收尾一次 `+styles-put` 交付(见 `lark-sheets-styles-put`) | `lark-sheets-write-cells` | `+cells-set --copy-to-range` 刷样式——它连**值**一起复制,会把整个区域的值覆盖成锚点格的值;拼 `+batch-update` 的 `--operations` 做美化 |
|
|
80
|
-
| **已有**表美化收尾(样式 / 边框 / 合并 / 行高列宽 / 冻结的任意组合,单表或多表) | `+styles-put --styles '{"styles":[{"name":…,"cell_styles":[…],"cell_merges":[…],"row_sizes":[…],"col_sizes":[…],"freeze":{…}}]}'`(一份规格一次交付,词汇同 `+table-put --styles`) | `lark-sheets-styles-put` | 拼 `+batch-update` 的 `--operations` 子操作数组做美化、逐区域多次 `+cells-set-style` |
|
|
81
|
-
| 画图表 / 可视化(柱 / 折线 / 饼 / 条 / 散点 / 组合…) | 普通单图用 `+chart-create-basic`,多图用扁平输入的 `+batch-chart-create`;已有图的数据源用 `+chart-data-update`、常用配置用 `+chart-config-update`;只有语义 shortcut 无法表达的单系列 / 单数据点 / 高级字段才用 `+chart-create` / `+chart-update`,并只提交必要的局部 properties。多图先断言目标数量,图片迁移成真图表后必须删除并复查原浮动图片 | `lark-sheets-chart` | matplotlib / 本地画图再贴图(原生图表可交互、随数据更新) |
|
|
82
|
-
| 分组汇总 / 透视 | `+pivot-create`(默认不传落点 flag → 自动新建子表,零覆盖) | `lark-sheets-pivot-table` | 用 SUMIF / 本地脚本拼一张假透视表 |
|
|
83
|
-
| 排序(按列升 / 降序) | `+range-sort`(原生整行原子移动,值 / 样式 / 空值随行走) | `lark-sheets-range-operations` | 本地排完再整块 `+cells-set` 回写——`cells-set` 写空值**不覆盖**目标格(保留原值),会残留旧值,且样式不随行移动 |
|
|
84
|
-
| 筛选 / 只看符合条件的行(仅行级不裁列;"只保留某几列 / 筛出来另存一张表"→ 不走这里,另建结果 sheet 物化行与列、原表原样保留) | `+filter-create` | `lark-sheets-filter` | pandas filter 后覆盖写回(会毁原数据;要保存多份筛选状态用 `+filter-view-create`) |
|
|
85
|
-
| 查找 / 替换文本 | `+cells-search`(找,关键字用 `--find`)、`+cells-replace`(替换) | `lark-sheets-search-replace` | `+cells-find`、`+find`、`--query` |
|
|
86
|
-
| 条件格式 / 条件高亮 / 数据条 / 色阶 / 重复值标记 | `+cond-format-create` | `lark-sheets-conditional-format` | `+highlight`、`+conditional-format`、逐格 `+cells-set-style` 硬凑 |
|
|
87
|
-
| 看子表结构(合并 / 行高列宽 / 冻结 / 隐藏) | `+sheet-info` | `lark-sheets-sheet-structure` | `+sheet-get`、`+structure-get`、`+sheet-structure-get` |
|
|
88
|
-
| 插图:图片**绑定到某条记录**、随行走(凭证 / 证件照 / 商品图 / 头像 / 二维码 / 每行配图) | `+cells-set-image`(单格 `--range`,嵌入单元格内) | `lark-sheets-write-cells` | — |
|
|
89
|
-
| 插图:**自由摆放、不绑数据**的装饰 / 标识(logo / 水印 / 封面大图 / banner) | `+float-image-create`(浮动图片,自由定位 + 尺寸 + 层级) | `lark-sheets-float-image` | — |
|
|
90
|
-
| 迷你图 / 单元格内趋势线 / 胜负图 | `+sparkline-create` 等 `+sparkline-*` | `lark-sheets-sparkline` | 文本字符(▁▂▃)拼接、matplotlib 贴图(不随数据更新) |
|
|
91
|
-
| 清除内容 / 格式 | `+cells-clear`(high-risk-write 需用户确认后带 `--yes`;范围维度用 `--scope`,取值 content / formats / all) | `lark-sheets-range-operations` | `--type` |
|
|
92
|
-
| 批量清除多区域 | `+cells-batch-clear`(high-risk-write 需用户确认后带 `--yes`;`--scope`) | `lark-sheets-batch-update` | `--target` |
|
|
93
|
-
| 调整列宽 / 行高 | `+cols-resize` / `+rows-resize`(行、列是两个独立命令;连同样式一起调时并入 `+styles-put` 的 `row_sizes` / `col_sizes`) | `lark-sheets-range-operations` | `--dimension`(无此 flag) |
|
|
94
|
-
| 看工作簿 / 子表清单 | `+workbook-info` | `lark-sheets-workbook` | `+sheet-list`、`+workbook-get`、`+workbook-list` |
|
|
95
|
-
| 导入本地 xlsx/xls/csv 文件为飞书电子表格 | `+workbook-import --file ./x.xlsx`(本地表格文件 → 飞书电子表格的正解;仅要导成多维表格 bitable 时才用 `drive +import --type bitable`) | `lark-sheets-workbook` | `drive +import`(绕路且要多给 `--type`)、本地读出数据再 `+workbook-create` 重灌(多此一举);要给**已有工作簿**加子表别用它(只会新建独立表,走 `+sheet-copy` / `+sheet-create`) |
|
|
96
|
-
| 参考某个**已有在线表**、把多个本地文件 / 数据各作为一张子表**追加**进去(不另起独立表) | 先 `+workbook-info` 拿模板子表 `sheet_id` → `+sheet-copy` 逐张复制模板子表(公式 / 合并 / 分组底色 / 列宽 / 条件格式全继承)再用 `+cells-*` 只改数据;无模板可继承时 `+sheet-create` 建空子表 + `+table-put --sheets/--styles` 写入 | `lark-sheets-workbook` | 把文件 `+workbook-import` / `+workbook-create` 另起一张**独立新表**(目标是并入已有工作簿时就跑偏了;这两条只产新表、不接受已有表定位) |
|
|
97
|
-
| 复核某次(AI)编辑改了什么 / 取两个版本间的变更 | `+changeset-get --start-revision <编辑前版本>`(省略 `--end-revision` 取到最新;版本差 ≤ 20) | `lark-sheets-changeset` | — |
|
|
98
|
-
| 取当前文档 revision(版本号) | `+revision-get` | `lark-sheets-workbook` | — |
|
|
99
|
-
| 导出 xlsx / 单表 csv | `+workbook-export` | `lark-sheets-workbook` | — |
|
|
100
|
-
|
|
101
|
-
> ⚠️ **动手前的触发式必读(按动作判定,不看主场景)**:本次操作只要**涉及样式 / 美化**(底色 / 边框 / 字号 / 对齐 / 数字格式 / 汇总行 / 配色 / 列宽行高),动手前先读 `lark-sheets-visual-standards`;只要**要写飞书公式**,动手前先读 `lark-sheets-formula-translation`(飞书函数与 Excel 有差异,凭直觉迁移易错),写完后可读 `lark-sheets-formula-verify` 并执行 `+formula-verify` 做一次诊断。哪怕主任务是"建表 / 展开数据 / 录入",只要动作里含美化或写公式就适用——别因"这不算专门的美化 / 公式任务"而跳过。
|
|
102
|
-
> ⚠️ **两种图片别选错**:图若**绑定某条记录、要随行排序 / 筛选 / 增删**(凭证 / 证件照 / 每行配图,话里带「对应 / 每行 / 这列」等绑定词)→ 单元格图片 `+cells-set-image`;只是自由摆放的装饰(logo / 水印 / 封面)→ 浮动图片 `+float-image-create`。别因「浮动图更好控制 / 更熟」默认选浮动图。
|
|
103
|
-
> ⚠️ **纯文本还是数值语义(看数据本质,不看当下用途)**:金额 / 百分比 / 比率 / 计数 / 日期等**本质是量值**的数据 → 一律数值写入,常规二维表用 `+table-put`(`dtypes` 声明类型 + `formats` 设展示格式),版式装不下(多级 / 合并表头的宽表 leaderboard 等)改用 `+cells-set` 传数字(百分比传小数 `0.4`)+ `number_format`,照样显示 `40%` 且数值无损。只有编号 / 身份证 / 单据号这类**本质是标识符**、要字面保真的才用 `+csv-put` 平铺。**几个常见借口都不成立**——"只是 leaderboard / 报表展示不用算""版式复杂""样式以后再刷、先铺文本"都不是把百分比写成 `"40%"` 字符串灌 `+csv-put` 的理由(展示不改变它是数值;类型不能后补,落成文本就回不来)。判据与操作展开见 `lark-sheets-write-cells`「数字还是文本」。
|
|
104
|
-
> ⚠️ **要新建子表 / 整表美化 → 别默认「`+csv-put` 写值再事后刷样式」**:`+table-put` / `+workbook-create` 的 `--styles` 能在写数据的**同一步**带全套样式(区域底色 / 边框 / 列宽 / 行高 / 合并),且 `+table-put` 的 payload 里若 sheet 名不在工作簿中会自动新建子表——**纯文本表要新建子表 + 美化时同样走这里**(`--styles` 与列是否 typed 无关),比「`+csv-put` 写值 + 多次 `+cells-batch-set-style` / `+*-resize` 刷样式」少好几次调用(冻结行列等 sheet 级属性仍需 `+dim-freeze` 单独一步)。存量表事后美化则一次 `+styles-put` 交付(同一份 `--styles` 词汇)。
|
|
105
|
-
> ⚠️ **定位 flag**:`+cells-get` / `+cells-set` / `+csv-get` 用 `--range`;`+csv-put` 规范用 `--start-cell`(单个左上角锚点格),也接受 `--range` 别名(区间自动取左上角),二者择一即可。**`--range` 只写 `A1:B2` 纯区间——不接受 OpenAPI 的 `sheetId!A1:B2` 前缀写法**,子表定位必须单独传 `--sheet-id` / `--sheet-name`(从 OpenAPI 迁移习惯最易踩)。
|
|
106
|
-
> ⚠️ **读取附加信息**一律走 `+cells-get --include …`,**没有** `--with-styles` 这类 flag;**看合并单元格**用 `+sheet-info` 的 `merged_cells`,不要在 `+cells-get` 里找 merge flag。
|
|
107
|
-
|
|
108
|
-
💡 **高频写命令签名(照抄改参即可;各命令 `--help` 的 Tips 段有同款示例)**:
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
lark-cli sheets +cells-set --url <U> --sheet-name S1 --range A1:B1 --cells '[[{"value":"名称"},{"formula":"=SUM(B2:B9)"}]]' # --cells 恒为二维数组 [[…]],单格也是 [[{…}]]
|
|
112
|
-
lark-cli sheets +cells-set-style --url <U> --sheet-name S1 --range A1:D1 --font-weight bold --background-color "#F0F0F0" --horizontal-alignment center
|
|
113
|
-
lark-cli sheets +styles-put --url <U> --styles - <<'JSON'
|
|
114
|
-
{"styles":[{"name":"S1","cell_styles":[{"range":"A1:D1","font_weight":"bold","background_color":"#F0F0F0"}],"col_sizes":[{"range":"A:D","type":"pixel","size":120}],"freeze":{"rows":1}}]}
|
|
115
|
-
JSON
|
|
116
|
-
lark-cli sheets +batch-update --url <U> --dry-run --operations - <<'JSON' # high-risk:先 --dry-run 给用户看,同意后原样重发并追加 --yes
|
|
117
|
-
[{"shortcut":"+cells-set","input":{"sheet_name":"S1","range":"A1","cells":[[{"value":"x"}]]}}]
|
|
118
|
-
JSON
|
|
119
|
-
lark-cli sheets +dim-freeze --url <U> --sheet-name S1 --rows 1 --cols 2 # 一次给全;冻结是整份状态覆盖,没写的轴即为不冻结
|
|
120
|
-
lark-cli sheets +dim-insert --url <U> --sheet-name S1 --position 3 --count 2 --inherit-style before # 行/列由 --position 决定:数字=行、字母=列,无 --dimension
|
|
121
|
-
lark-cli sheets +cols-resize --url <U> --sheet-name S1 --range A:C --width 120 # 像素;分列不同宽用 --widths '{"A":80,"C:E":120}'
|
|
122
|
-
lark-cli sheets +sheet-copy --url <U> --sheet-name 源表名 --title 副本名 # --sheet-name=源表、--title=新表名
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
## 执行要点(读取 / 原生工具 / 陷阱)
|
|
126
|
-
|
|
127
|
-
### 读取:按需求选路径(细则见 `lark-sheets-read-data`)
|
|
128
|
-
|
|
129
|
-
| 用户需求 | 读取路径 |
|
|
130
|
-
|---|---|
|
|
131
|
-
| "完善 / 补齐 / 修正所有 XX"、分析 / 清洗 / 大数据 | 先 `scripts/lark_profile_table.py` 确认目标区域与字段画像,再原生优先(公式 / 透视表 / 筛选等原生对象,命令见速查表);表达不了再分批 `+csv-get` 导出 + 脚本处理 + 分批回写(默认覆盖所有对应数据行) |
|
|
132
|
-
| "查一下 / 统计 / 汇总"等只读 | 小表 `+csv-get` 读到上下文;大表先 `+workbook-info` + 小窗口 `+csv-get` 定边界,再对未截断窗口跑 `scripts/lark_detect_subtables.py` / `scripts/lark_profile_table.py` |
|
|
133
|
-
| 需要公式 / 样式 / 批注 | `+cells-get` |
|
|
134
|
-
| 续写 / 扩展已有内容 | `+csv-get` 看结构 + `+cells-get` 读源区样式 + `+sheet-info --include row_heights,merges`(见准则 5) |
|
|
135
|
-
|
|
136
|
-
> "补齐 / 填空"类只探前 10 行就写会漏写表尾——先按 `lark-sheets-read-data` 确认真实数据末行(准则 3)。
|
|
137
|
-
|
|
138
|
-
### 用脚本配合 CLI 时
|
|
139
|
-
|
|
140
|
-
- **只读 stdout**:CLI 数据走 stdout、诊断走 stderr;解析 JSON 别 `2>&1`(警告混入会解析失败),用管道或单独重定向 stdout。
|
|
141
|
-
- **读表理解优先用 `scripts/lark_*.py`(若可用)**:`lark_inspect_workbook.py` / `lark_detect_subtables.py` / `lark_profile_table.py` 是只读脚本,用来把在线表格整理成结构摘要。**可选增强,不是必经步骤**——`scripts/` 只随仓库版 skill 分发,二进制内嵌版没有这些文件;本地不存在时直接用 CLI 等价路径(对照表见 `lark-sheets-read-data`:`+workbook-info` / `+sheet-info` / 小窗口 `+csv-get`)。它们不替代写入类 shortcut;确认目标区域后,写入仍按对应 reference 执行。
|
|
142
|
-
- **喂 CLI 的 CSV / JSON 用 UTF-8 无 BOM**;临时文件**不要落进用户项目目录**——宿主若声明过 workspace 落点纪律(如禁用 `/tmp`)就照它放,没有则用系统临时目录。
|
|
143
|
-
- **命令失败先读 stderr 再调整**,别原样重发。
|
|
144
|
-
- **回写纯单元格值**:值(样式)注记剥离规则见准则 2(SoT);补充:残留引号一并剥离;排序优先 `+range-sort` 原生工具,别"读出本地排完再整列写回"。
|
|
145
|
-
|
|
146
|
-
### 易漏陷阱
|
|
147
|
-
|
|
148
|
-
- **`+dim-insert` 不继承行高**:只继承值 / 公式 / 边框,新行回落默认高度截断长文本;插行填长文本前读相邻行 `row_height`,用 `+batch-update` 合 `+rows-resize` 补齐。
|
|
149
|
-
- **公式容错**:日期 / 查找 / 数值转换公式用 `IFERROR` 包裹;写完读结果列首末各 5 行查 `#VALUE!` / `#REF!` / `#DIV/0!`,必要时再跑 `+formula-verify` 定位问题;同一方案试错上限 3 次。
|
|
150
|
-
- **循环引用**:聚合公式引用范围不能含目标 cell 自身或其传递依赖。
|
|
151
|
-
- **隐藏行列**:`+csv-get` 默认含隐藏行列;设 `--skip-hidden=true` 只看可见,返回的真实行号可能跳空。禁止按返回数组下标推导行号,必须使用 `annotated_csv` 的 `[row=N]` 或 `row_indices`。
|
|
152
|
-
- **跨 sheet 对象**:图表 / 条件格式 / 透视表 / 浮动图片可能分布在多个子表,操作前先 `+workbook-info` 掌握全局。
|
|
153
|
-
- **断定"命令不支持某场景"前必须实调一次拿到真实报错**:不得仅凭 `--help` 输出或推测就降级绕路——工具描述与实现可能不一致,报错才是事实。
|
|
154
|
-
- **NLP 任务分批**:语义理解 / 翻译 / 改写 / 分类等用 NLP 处理(代码只做分批 / 行号映射 / 写回);数据量大必须分批(通常 30 行 / 批),每批处理完即时写回,单批生成通常 ≤ 300 行,多批用 `+batch-update`。
|
|
155
|
-
|
|
16
|
+
## 场景 → 命令速查
|
|
17
|
+
|
|
18
|
+
> 按当前动作选行;下一步必须 Read 该行 reference,读取完成前不得执行命令。只读命中的文档;含公式 / 样式等横切动作时再读对应规范,禁止用目录枚举代替 Read。
|
|
19
|
+
|
|
20
|
+
| 你要做的事 | ✅ 正确写法 | 动手前读(先 Read 再动手) |
|
|
21
|
+
| --- | --- | --- |
|
|
22
|
+
| 读数据 | `+csv-get`(纯值/CSV)、`+cells-get`(公式/样式/批注) | 读 `references/lark-sheets-read-data.md` |
|
|
23
|
+
| 写入数据 | `+csv-put`(无类型歧义纯文本)、`+table-put`(typed;量值/真日期;标签/编号/前导零/文本数字用 object,禁裸 csv-put)、`+cells-set`(公式/富写入)、`+cells-set-style`(样式)、`+cells-set-image`(单元格图片) | 读 `references/lark-sheets-write-cells.md` |
|
|
24
|
+
| 格式继承(新列/新行) | 物理插行 / 插列用 `+dim-insert --inherit-style before\|after`;往已有空白区域扩写用 `+range-copy --paste-type formats` 先铺样式再写值 | 读 `references/lark-sheets-range-operations.md`;插行插列再读 `references/lark-sheets-sheet-structure.md` |
|
|
25
|
+
| 工作簿操作 | `+workbook-create`、`+workbook-info`、`+workbook-import`、`+sheet-copy`、`+revision-get`、`+workbook-export` | 读 `references/lark-sheets-workbook.md` |
|
|
26
|
+
| 行列操作 | 排序用 `+range-sort` 原子移动整行;合并 / 取消合并用 `+cells-merge` / `+cells-unmerge`;清空内容才用 `+cells-clear`;尺寸用 `+cols-resize` / `+rows-resize` | 读 `references/lark-sheets-range-operations.md`;涉结构布局再读 `references/lark-sheets-sheet-structure.md` |
|
|
27
|
+
| 美化收尾 | `+styles-put` | 读 `references/lark-sheets-styles-put.md` |
|
|
28
|
+
| 子表结构 | `+sheet-info`、`+dim-insert`;删整行 / 列用 `+dim-delete`,不能用 clear 代替 | 读 `references/lark-sheets-sheet-structure.md` |
|
|
29
|
+
| 画图表 / 可视化 / 柱状图 / 折线图 / 饼图 / 趋势 / 占比 | 单图用 `+chart-create-basic`,多图用扁平输入的 `+batch-chart-create`;改已有图的数据源用 `+chart-data-update`、配置用 `+chart-config-update`;只有语义 shortcut 表达不了的单系列 / 单数据点 / 高级字段才用 `+chart-create` / `+chart-update`,且只提交必要的局部 properties。动手前先断言每张图的类型、横轴字段、分组字段和目标张数,画完 `+chart-list` 逐项核;图片迁移成真图表后删除并复查原浮动图片 | 读 `references/lark-sheets-chart.md`;含透视 / 分组汇总再读 `references/lark-sheets-pivot-table.md` |
|
|
30
|
+
| 分组汇总 / 透视 | `+pivot-create` | 读 `references/lark-sheets-pivot-table.md` |
|
|
31
|
+
| 筛选 / 只看符合条件的行 | `+filter-create` | 读 `references/lark-sheets-filter.md` |
|
|
32
|
+
| 查找 / 替换文本 | `+cells-search`、`+cells-replace` | 读 `references/lark-sheets-search-replace.md` |
|
|
33
|
+
| 条件格式 / 条件高亮 / 数据条 / 色阶 | 随数据变化的标色用 `+cond-format-create`;固定刷色只用于用户点名要静态着色 | 读 `references/lark-sheets-conditional-format.md` |
|
|
34
|
+
| 插图:自由摆放的装饰 | `+float-image-create` | 读 `references/lark-sheets-float-image.md` |
|
|
35
|
+
| 迷你图 / 单元格内趋势线 | `+sparkline-create` | 读 `references/lark-sheets-sparkline.md` |
|
|
36
|
+
| 批量清除多区域 | `+cells-batch-clear` | 读 `references/lark-sheets-batch-update.md`(high-risk) |
|
|
37
|
+
| 复核编辑变更 / 取版本间差异 | `+changeset-get` | 读 `references/lark-sheets-changeset.md` |
|
|
38
|
+
| 保存多份筛选状态 / 命名筛选视图 | `+filter-view-create`;视图与 `+filter-create` 相互独立、可在同一子表共存 | 读 `references/lark-sheets-filter-view.md` |
|
|
39
|
+
| 查编辑历史 / 回滚到历史版本 | `+history-list` 取版本,`+history-revert`(high-risk,异步)回滚后用 `+history-revert-status` 轮询 | 读 `references/lark-sheets-history.md` |
|
|
40
|
+
|
|
41
|
+
> ⚠️ 金额 / 百分比 / 比率 / 计数及参与运算的真日期写数字(百分比传 `0.4` + `number_format`);日期标签、编号、前导零、身份证 / 单据号写文本。`--range` 只写 `A1:B2`,子表另传 `--sheet-id` / `--sheet-name`。
|
|
42
|
+
|
|
43
|
+
## 飞书表格编辑准则
|
|
44
|
+
|
|
45
|
+
1. **最小改动**:用户没点名要删 / 改名 / 隐藏时,已有 Sheet 一张不动;补齐只写空格,未要求调整的值 / 结构 / 格式不动。
|
|
46
|
+
2. **目标子表与回读断言**:先确认真实末行与目标区域;未点名子表时只从 `resource_type=sheet && is_hidden=false` 的可见网格候选里选,唯一才自动使用,多张不得按 index 猜。涉及"所有 / 每个 sheet"(跨表汇总、批量清洗、合并多张子表)时先 `+workbook-info` 列全再逐个处理,别只做前几张。写后用 `+csv-get` / `+cells-get` / `+<对象>-list` 验首、中、末及用户点名项——返回 `ok` 只表示请求成功。纯 CSV 回写前去掉 `annotated_csv` 的 `[row=N] ` 前缀,`cells-get` 的样式字段与值分开处理,公式必须回读 `formula`。**样式同样要回读**:写过边框 / 底色 / 字体色 / 数字格式 / 行高列宽 / 冻结的,收尾用 `+cells-get --include style` 或 `+sheet-info` 抽查目标区域首、中、末格确认属性真的在——写入返回 `ok` 不代表样式落上了;缺的整份重发(样式是幂等盖章,重发无副作用)。
|
|
47
|
+
3. **公式闭环**:可推导值写落格公式,不用静态值代替——用 Python 算好数值再写进单元格,交付的是改输入不重算的死表;Python 只用于推导和验证,落进单元格的必须是引用其他格的公式。写前确认字段语义、阈值边界(以上/至少=`>=`,超过/大于=`>`)、单位/时区和完整源范围,选首中末、空值、边界及一条可手算记录作哨兵;写后逐段 `+formula-verify --exit-on-error`,各段 `status='success'` 且哨兵值正确才算完成(AI 公式例外:异步计算,改用 `+formula-verify --ai-only` 对整个写入区间做一次异步状态检查,不用 `+cells-get` 轮询结果,`failed` 清零后即使仍有 pending 也可交付并说明);试错 3 次仍失败可降级静态值,交付说明写明「静态值 + 失败原因 + 不随源数据更新」。
|
|
48
|
+
4. **完整继承样式**:新增行列时禁止只读值只写值——原表字体、对齐、底色(含奇偶行交替)、四边框都延续到新区域。**物理插入行 / 列**用 `+dim-insert --inherit-style before|after`(原生继承,比补刷可靠);**往已有空白区域扩写**(如在数据右侧加新列)用 `+range-copy --paste-type formats` 先铺样式再写值;两者都表达不了的非规则样式,才用 `+cells-get --include style` 读源区样式随值写回。无论走哪条路径,插入后都另查行高列宽(行高不随样式继承,插行填长文本前补 `+rows-resize`)、合并与跨列标题并补齐。详见 `references/lark-sheets-write-cells.md`。
|
|
49
|
+
5. **原子操作**:排序用 `+range-sort`,`--range` 覆盖完整记录宽度,排序列只写进 `--sort-keys`;删除记录用 `+dim-delete`,清空内容 / 格式才用 `+cells-clear`;禁止读值后用 `+csv-put` 覆盖来模拟排序 / 删除。仅跨类型且有顺序依赖时才用 high-risk `+batch-update`。
|
|
50
|
+
6. **标色分流**:数据变化后应自动重算的高亮 / 标红用条件格式,已确定结果的固定标注用静态样式,装饰性美化按视觉规范。两条路径取色字段用同一判据:用户中文语境下的"标红 / 染色 / 标记"指**单元格背景色**,"文字红 / 字体红 / 把字变红"才用字体色,默认无说明时选背景色。条件格式建完先 `+cond-format-list` 验规则与范围,再 `+cond-format-result-get` 抽查哨兵格命中样式。
|
|
51
|
+
7. **产物可核对**:用户点名的 sheet 名与数量、表头、标题、图例、文件名、口径逐字保留;回复中每项“已完成”都能定位到产物,缺口逐项声明。
|
|
52
|
+
8. **替换与新增**:批量替换 / 删除后搜索确认无残留;新增列要有表头,单位 / 口径另置,不占原表头或数据格。
|
|
53
|
+
9. **不编造**:表外数据须有可核验来源,不用常识或名称推断伪造公司、标准值、行情或法规参数;**没有来源就留空**——凭记忆填的数值大概率与真实值对不上,比留空更糟。留空的格在交付说明里逐项列出格址与缺的来源,不要只写一句"部分数据缺失"。
|
|
54
|
+
|
|
55
|
+
> 🤖 **文本类 NLP 任务首选 AI 公式,别默认退回手工 / Python**:只要对文本列做**翻译 / 情感 / 分类打标签 / 信息提取 / 总结 / 润色**等 NLP,飞书在线表格上优先用原生 `=AI(prompt, range)` 逐列铺开(写法与普通公式一致,见 `references/lark-sheets-formula-translation.md`),一次落表随行自动计算,比逐条读 → 手工判断 → 回写 / Python 调模型再写静态值都更省事。**判定标准是「逐行独立」**:每个目标单元格只依赖同一行输入即为逐行独立,**数据量(哪怕 1 万 +)、分批、判断复杂度都不改变该判定**——大数据量下 AI 公式仍是首选,分批只改公式铺设的批次大小(行数很多时按批串行,量级参考每批几百到一千行),不得改为「用 Python 或规则脚本生成语义结果后静态写回」;Python 只能做清洗 / 行号映射 / 构造公式批次,不得读源文本生成目标语义值。只有单个结果依赖多行输入的跨行任务才走非公式路线。AI 公式异步计算,写完先对种子格 / 首格做**一次** `+cells-get --include formula` 核对文本,随后**第一校验入口必须是** `+formula-verify --ai-only --range <整个写入区间>`,禁止用 `+cells-get` 轮询计算结果;判据为 `ai_formula_failed_count == 0`(`--range` 只透传给后端、不保证收窄汇总口径,按返回的单元格定位核对本次区间,别拿总数对预期条数),满足后即使仍有 pending 也可交付,并告知用户"AI 公式仍在后台运行"。
|
|
56
|
+
|
|
57
|
+
> 流程:了解结构 →(未点名时先按 visible_grid selection 定位)→ 读数据 → 原生工具写入 → 按用户点名项回读验证 → 在线交付。整理 / 美化 / 加汇总行这类会改变表长或版式的任务,收尾把表头行冻住(原表已有冻结设置的不动)。xlsx 验收只在处理本地 xlsx、或用户点名要本地 xlsx / 下载 / 打印时跑。
|
|
156
58
|
## References
|
|
157
59
|
|
|
158
60
|
reference 分两组:先读**通用方法与规范**(横切所有任务的样式 / 公式规则),再按操作对象进入**工具参考**查具体 shortcut。编辑类任务务必先过通用方法与规范,连同上方「飞书表格编辑准则」对所有工具参考一律生效。
|
|
@@ -162,18 +64,18 @@ reference 分两组:先读**通用方法与规范**(横切所有任务的样
|
|
|
162
64
|
| Reference | 描述 |
|
|
163
65
|
| --- | --- |
|
|
164
66
|
| [飞书表格样式与配色规范](references/lark-sheets-visual-standards.md) | 飞书表格样式与配色规范:表头/数据区/汇总行的颜色、字号、对齐、边框、数字格式等取值标准,以及从零新建表格的版式美化、新增汇总行、追加行列继承原表风格、已有区域美化等典型场景的决策流程与样式要点。工具调用参数细节请参考对应的 lark-sheets-write-cells / lark-sheets-range-operations / lark-sheets-batch-update。条件格式(高亮、标红、数据条、色阶)请使用 lark-sheets-conditional-format。 |
|
|
165
|
-
| [飞书表格公式生成规则](references/lark-sheets-formula-translation.md) | Excel 公式到飞书表格公式的迁移与生成规则。核心目标不是保留 Excel 原语法,而是按飞书表格可执行规则重写公式,并在结果上尽量对齐 Excel。当用户要求把 Excel 公式改写成飞书表格公式,或需要生成飞书公式(尤其涉及 ARRAYFORMULA、数组语义与逐行填充、原生数组函数、INDEX/OFFSET、MAP/LAMBDA
|
|
67
|
+
| [飞书表格公式生成规则](references/lark-sheets-formula-translation.md) | Excel 公式到飞书表格公式的迁移与生成规则。核心目标不是保留 Excel 原语法,而是按飞书表格可执行规则重写公式,并在结果上尽量对齐 Excel。当用户要求把 Excel 公式改写成飞书表格公式,或需要生成飞书公式(尤其涉及 ARRAYFORMULA、数组语义与逐行填充、原生数组函数、INDEX/OFFSET、MAP/LAMBDA、日期差、多层范围结果与二次展开)时使用。本文负责把公式写对;落表后必须用 `references/lark-sheets-formula-verify.md` 对本次公式范围逐段诊断。 |
|
|
166
68
|
|
|
167
69
|
### 按对象的工具参考(含 shortcut)
|
|
168
70
|
|
|
169
71
|
| Reference | 描述 |
|
|
170
72
|
| --- | --- |
|
|
171
|
-
| [Lark Sheet Formula Verify](references/lark-sheets-formula-verify.md) | 公式写入 / 批量填充 / `--copy-to-range` 扩展 /
|
|
73
|
+
| [Lark Sheet Formula Verify](references/lark-sheets-formula-verify.md) | 公式写入 / 批量填充 / `--copy-to-range` 扩展 / 导入含公式工作簿后的完成检查。普通公式按本次新增或修改范围逐段扫描,合并编译失败与 7 类运行错误;`partial` 继续拆分,全部 `status='success'` 后完成。AI 公式用 `--ai-only` 对整个写入区间做一次异步状态检查,pending 可说明后交付。 |
|
|
172
74
|
| [Lark Sheet Workbook](references/lark-sheets-workbook.md) | 管理飞书表格的工作簿结构(子表列表及元数据)。当用户提到"看看这个表格有什么"、"表格结构"、"有哪些 sheet"、"新建一个 sheet"、"删除这个工作表"、"重命名"、"复制一份"、"移动到前面"时使用。 |
|
|
173
|
-
| [Lark Sheet Sheet Structure](references/lark-sheets-sheet-structure.md) |
|
|
75
|
+
| [Lark Sheet Sheet Structure](references/lark-sheets-sheet-structure.md) | 管理飞书表格的子表结构与布局:查看行高列宽、隐藏、合并、冻结与分组,并执行插入/删除/移动行列等物理结构操作。数据分组统计走 lark-sheets-pivot-table。普通表尾追加优先用 lark-sheets-write-cells 的 `+table-put --mode append` 自动定位末行;只有用户明确要求物理插入行列、继承模板结构或扩容布局时才先用本 reference。 |
|
|
174
76
|
| [Lark Sheet Read Data](references/lark-sheets-read-data.md) | 读取飞书表格中的单元格数据。当用户需要"看看数据"、"分析数据"、"统计/汇总"时使用;也适用于需要查看公式、样式、批注等详细信息的场景。 |
|
|
175
77
|
| [Lark Sheet Search & Replace](references/lark-sheets-search-replace.md) | 在飞书表格中搜索和替换文本,支持限定范围、大小写匹配、精确匹配、正则表达式。当用户需要"查找"、"搜索"、"定位"某个值,或"替换"、"批量修改文本"、"把 A 改成 B"时使用。不要用于理解表格结构(应读取数据)、不要用于数据分析(应读取数据后计算)、不要把用户操作动作中的关键词(如"汇总金额""统计数量")当作搜索词。 |
|
|
176
|
-
| [Lark Sheet Write Cells](references/lark-sheets-write-cells.md) |
|
|
78
|
+
| [Lark Sheet Write Cells](references/lark-sheets-write-cells.md) | 向飞书表格指定区域批量写入值、公式、样式、批注或单元格图片。纯文本可用 `+csv-put`;金额、百分比、日期、布尔、计数和后续参与聚合的列用 `+table-put` 并显式声明 dtypes/formats;公式或富字段用 `+cells-set`。追加数据可直接使用 `+table-put --mode append`;只有明确需要物理插行/列时才先走 lark-sheets-sheet-structure。公式落表后必须运行 lark-sheets-formula-verify。 |
|
|
177
79
|
| [Lark Sheet Range Operations](references/lark-sheets-range-operations.md) | 对飞书表格中指定区域执行结构性操作(不涉及写入单元格数据值)。适用场景:清除内容或格式("清空"、"删除内容"、"去掉格式")、合并/取消合并单元格、调整行高列宽("加宽列"、"自适应列宽")、移动/复制/填充/排序数据("移动数据"、"复制到"、"自动填充"、"按某列排序")。写入单元格数据请使用 lark-sheets-write-cells。 |
|
|
178
80
|
| [Lark Sheet Styles Put](references/lark-sheets-styles-put.md) | 把一份声明式视觉规格(样式/边框/合并/行高列宽/冻结)一次性应用到已有飞书表格的多个子表,整份规格一次提交。当任务是对存量表做美化收尾、批量刷样式、统一版式时使用。样式取值标准见 lark-sheets-visual-standards;建新表带样式走 lark-sheets-workbook(+workbook-create --styles)、写数据同步带样式走 lark-sheets-write-cells(+table-put --styles),三者共用同一份 --styles 词汇。仅针对飞书表格。 |
|
|
179
81
|
| [Lark Sheet Batch Update](references/lark-sheets-batch-update.md) | 将多个飞书表格写入操作合并为一次批量执行,按顺序依次完成。适合需要连续执行多个写入操作的场景(如先修改结构再写入数据)。 |
|
|
@@ -186,22 +88,21 @@ reference 分两组:先读**通用方法与规范**(横切所有任务的样
|
|
|
186
88
|
| [Lark Sheet Float Image](references/lark-sheets-float-image.md) | 管理飞书表格中的浮动图片。当用户需要在表格中插入浮动图片、调整图片位置和大小、查看已有浮动图片、删除图片时使用。也适用于"插入图片"、"添加 logo"、"放一张图"等场景。注意:如果用户需要将图片嵌入到某个单元格内部(单元格图片),请阅读 lark-sheets-write-cells。 |
|
|
187
89
|
| [Lark Sheet History](references/lark-sheets-history.md) | 查询飞书表格的历史版本并回滚到指定版本。当用户需要查看一张表的编辑历史版本列表、回滚到某个历史版本、或查询回滚的异步状态(进行中/成功/失败)时使用。回滚为异步操作,发起后通过状态查询轮询结果。仅针对飞书表格。 |
|
|
188
90
|
| [Lark Sheet Changeset](references/lark-sheets-changeset.md) | 读取两个版本(CS revision)之间的 changeset(原始变更操作清单),用于复核某次编辑——尤其是 AI 编辑——是否真实满足用户诉求。传入起始版本(编辑前基线),可选结束版本(省略取最新),版本差上限 20;返回里最外层带当前表格最新版本号。当用户需要"看看这次改了什么"、"核对 AI 改动"、"对比两个版本的变更"时使用。 |
|
|
189
|
-
| [Lark Sheet 旧命令迁移指南](references/lark-sheets-legacy-command-migration.md) | 重构前的 42 个 sheets 旧命令(`+create`、`+read`、`+write`、`+create-sheet`、`+media-upload` 等)已删除,调用会直接报 `unknown subcommand`。当手上的脚本或 skill 早于本次重构、或收到该报错时,用本文查替代命令,以及那些不只是改名的差异:单元格 payload 词汇(`{"type":"formula","text":…}` 已被拒绝)、响应字段路径、`+update-sheet` / `+update-dimension` 拆成多个命令。 |
|
|
190
91
|
|
|
191
92
|
## 公共 flag 速查
|
|
192
93
|
|
|
193
|
-
各 reference 的 shortcut 标题下用一行徽章标注支持的公共 / 系统 flag(如 `_公共四件套 · 系统:--dry-run_
|
|
94
|
+
各 reference 的 shortcut 标题下用一行徽章标注支持的公共 / 系统 flag(如 `_公共四件套 · 系统:--dry-run_`)。type / 必填 / 描述在本段统一声明:
|
|
194
95
|
|
|
195
96
|
### 公共 flag(定位资源)
|
|
196
97
|
|
|
197
|
-
**公共四件套** = `--url` / `--spreadsheet-token` / `--sheet-id` / `--sheet-name`,分成两组 XOR,**每组都必须给且只能给一个**(XOR = 二选一必填,不是"可选"
|
|
98
|
+
**公共四件套** = `--url` / `--spreadsheet-token` / `--sheet-id` / `--sheet-name`,分成两组 XOR,**每组都必须给且只能给一个**(XOR = 二选一必填,不是"可选")——`spreadsheet` 指工作簿、`sheet` 指子表;条件格式 / 图表 / 筛选视图 / 透视表 / 迷你图 / 浮动图片这类对象在四件套之外另用各自的 `--*-id` 定位:
|
|
198
99
|
|
|
199
100
|
1. **spreadsheet 定位(必填)**:`--url`(解析 `/sheets/`、`/spreadsheets/`、`/wiki/` 三种链接;wiki 链接自动定位背后的电子表格)与 `--spreadsheet-token`(裸 token)二选一。**例外**:`+workbook-create` / `+workbook-import` 产出**还不存在**的表,不接受任何定位 flag。
|
|
200
101
|
2. **sheet 定位(公共四件套 shortcut 必填)**:`--sheet-id` 与 `--sheet-name` 二选一。
|
|
201
102
|
- ⚠️ **不确定 sheet 名时禁止猜 `Sheet1`**:除非对话或上下文已出现具体值,第一步先 `+workbook-info` 拿 `sheets[].sheet_id/title` 再选——中文表的子表常叫"数据"/"工作表 1"/业务名,猜名大概率撞 `sheet not found`。
|
|
202
103
|
- ⚠️ **`--range` 里的 `Sheet1!` 前缀不能替代 sheet 定位**:仍必须传 `--sheet-id` / `--sheet-name`。
|
|
203
|
-
- ⚠️ **A1 引用含 `!` 时整段用单引号包裹**(`--range 'Sheet1!A1:B2'`,挡 bash history expansion;别用 `set +H`,sh/dash 下非法)。sheet
|
|
204
|
-
- **例外**:徽章标 `_公共:URL/token(无 sheet 定位)…_` 的 shortcut
|
|
104
|
+
- ⚠️ **A1 引用含 `!` 时整段用单引号包裹**(`--range 'Sheet1!A1:B2'`,挡 bash history expansion;别用 `set +H`,sh/dash 下非法)。sheet 名要在 A1 里内层再包单引号时用 `'\''` 转义。
|
|
105
|
+
- **例外**:徽章标 `_公共:URL/token(无 sheet 定位)…_` 的 shortcut 不接受 sheet 定位——工作簿级(`+workbook-info` / `+sheet-list` / `+sheet-create` / `+revision-get` / `+changeset-get` / `+history-list|revert|revert-status`)、批量与整表级(`+batch-update` / `+batch-chart-create|update` / `+cells-batch-clear` / `+styles-put` / `+dropdown-update|delete`),以及子表名写在 payload 里的 `+table-put`。`+workbook-export` 只接 `--sheet-id`(无 `--sheet-name`),`+pivot-create` 用 `--target-sheet-id/name`(XOR,可都不传)。徽章是判据,本行只是速记。
|
|
205
106
|
|
|
206
107
|
```bash
|
|
207
108
|
# 统一调用范式:两组定位缺一不可(占位符别原样填;表名先 +workbook-info 查)
|
|
@@ -212,40 +113,24 @@ lark-cli sheets +csv-get --url "https://.../sheets/shtXXX" --sheet-name "<真实
|
|
|
212
113
|
|
|
213
114
|
| Flag | Type | 必填 | 说明 |
|
|
214
115
|
| --- | --- | --- | --- |
|
|
215
|
-
| `--dry-run` | bool | 否 |
|
|
116
|
+
| `--dry-run` | bool | 否 | 零副作用:仅打印请求路径与参数模板,不发起调用 |
|
|
216
117
|
| `--yes` | bool | 是(仅 `high-risk-write`) | 二次确认;不带时退出码 10。详见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md) 高风险审批协议 |
|
|
217
|
-
| `--print-schema` | bool | 否 |
|
|
118
|
+
| `--print-schema` | bool | 否 | 写复合 JSON flag 前结构不确定就先跑它:本地打印 Schema 并退出(不发起调用、不需要其它 required flag),搭配 `--flag-name` 指定查哪个 flag,省略时列出该 shortcut 可查的 flag。只有含复合 JSON flag 的 shortcut 支持。 |
|
|
218
119
|
| `--flag-name` | string | 否 | 配合 `--print-schema`:flag 名不带 `--` 前缀(`cells` / `properties`)。**支持点分路径切片**:`--flag-name properties.snapshot.plotArea.axes` 只打印该子树,大 schema(chart 的 properties 约 1700 行)按需取,别整篇翻页。 |
|
|
219
120
|
|
|
220
121
|
> **bool flag 语法**:开启可用裸 `--flag`;显式值只用 `--flag=true` 或 `--flag=false`,不得用空格分隔。
|
|
221
122
|
|
|
222
|
-
> ⚠️ **high-risk-write 命令清单(exit 10 强确认门禁)**:`+batch-update`、`+cells-clear`、`+cells-batch-clear`、`+sheet-delete`、`+dim-delete`、`+dropdown-delete
|
|
123
|
+
> ⚠️ **high-risk-write 命令清单(exit 10 强确认门禁)**:`+batch-update`、`+cells-clear`、`+cells-batch-clear`、`+sheet-delete`、`+dim-delete`、`+dropdown-delete`、`+history-revert`(整表回滚到历史版本),以及各对象删除 `+chart-delete` / `+pivot-delete` / `+cond-format-delete` / `+filter-delete` / `+filter-view-delete` / `+sparkline-delete` / `+float-image-delete`。
|
|
223
124
|
>
|
|
224
125
|
> **审批协议**:先 `--dry-run` 预览、向用户展示将执行的操作与影响范围,**获得用户明确同意后**再在原命令追加 `--yes` 执行。未经用户同意不得带 `--yes`,也不得在 exit 10 后静默补 `--yes` 重试——那等于禁用门禁。完整协议见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md)。
|
|
225
126
|
|
|
226
|
-
**
|
|
127
|
+
**Schema 的边界**:`--print-schema` 打印的是 flag 值的内部结构,flag 描述要求外层信封时(如 `--sheets` 的 `{"sheets":[…]}`)schema 里看不到那层,按描述补上;reference 的 `## Schemas` 段也只给一层。图表直接 `+chart-create --print-example <type>` 拿最小可用模板改参。
|
|
227
128
|
|
|
228
129
|
### flag 内容类型与输出约定(术语速记)
|
|
229
130
|
|
|
230
|
-
- JSON 类入参分三类:**复合 JSON** = 深层嵌套对象(`--print-schema` 可查);**简单 JSON** = 一二维标量数组;**非 JSON 文本** = 原样文本(如 CSV
|
|
131
|
+
- JSON 类入参分三类:**复合 JSON** = 深层嵌套对象(`--print-schema` 可查);**简单 JSON** = 一二维标量数组;**非 JSON 文本** = 原样文本(如 CSV)。
|
|
231
132
|
- **envelope**:所有 shortcut 返回统一外层 `{ok, identity, data, ...}`;写操作不会自动回读,校验自行调用 `+*-list` / `+*-get` / `+cells-get`。
|
|
232
|
-
|
|
233
|
-
## 复合 JSON / 大入参:优先 stdin
|
|
234
|
-
|
|
235
|
-
flag 帮助里标注支持 **Stdin** 的入参,当 payload 较大、含换行 / 引号等特殊字符,或已经落在某个文件里时,优先用 stdin(`-`)传入,避免命令行超长与 shell 转义问题。
|
|
236
|
-
|
|
237
|
-
推荐写法:payload 写到用户项目目录之外的临时文件(落点同上:宿主声明过禁用 `/tmp` 就放 workspace 内相对路径,否则系统临时目录),再用 stdin 喂进去:
|
|
238
|
-
|
|
239
|
-
```bash
|
|
240
|
-
# TMPFILE 指向 payload 文件(落点按上文纪律选:workspace 内相对路径,或系统临时目录)
|
|
241
|
-
lark-cli sheets +cells-set --url "..." --sheet-name "Sheet1" --range "A1:B2" --cells - < "$TMPFILE"
|
|
242
|
-
lark-cli sheets +batch-update --url "..." --dry-run --operations - <<'JSON' # high-risk:先 --dry-run,用户同意后再追加 --yes 重发
|
|
243
|
-
[{"shortcut":"+cells-set","input":{...}}]
|
|
244
|
-
JSON
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
- **stdin 每次调用只能给一个 flag**:`+table-put` 同时传 `--sheets` 与 `--styles` 两个大 JSON 时,一个走 `-`、另一个走 `@./styles.json`(`@file` 只接受 cwd 下相对路径,**绝对路径会被拒**;正解是 stdin,别 cd、别把临时文件写进用户项目目录)。
|
|
248
|
-
- **参数含特殊字符时用单引号包裹即可,不要 `set +H`**(sh/dash 下非法直接报错);参数本身含单引号或 payload 大时走 stdin。
|
|
133
|
+
- **大 payload 走文件 / stdin,不在命令行内联**:Type 标 `File + Stdin` 的 flag 支持 `--flag "@./x.json"`(`@file` 只接受 cwd 下相对路径,绝对路径被拒)与 `--flag -`(stdin);payload 含换行 / 引号或体量大时一律落文件。**stdin 每次调用只能给一个 flag**——`+table-put` 的 `--sheets` 与 `--styles` 都是大 JSON 时,一个走 `-`、另一个走 `@./x.json`。临时文件不要落进用户项目目录。
|
|
249
134
|
- **非 POSIX shell(PowerShell / cmd.exe)适配**:本 skill 全部 `bash` 代码块(heredoc `<<'JSON'`、单引号转义 `'\''`)只适用于 bash / zsh,动手前先判断当前 shell,非 POSIX 环境按下表改写,**不要试错式改引号**——`@file`(cwd 相对路径)是全平台无引号问题的兜底形态:
|
|
250
135
|
|
|
251
136
|
| 形态 | bash / zsh | PowerShell | cmd.exe |
|
|
@@ -5,19 +5,19 @@
|
|
|
5
5
|
`+batch-update` 把多次写入打包成单次请求,但每个子操作仍应按编辑类任务的范围和回读建议处理:
|
|
6
6
|
|
|
7
7
|
1. **目标 range 应落在用户授权范围内**:除用户明示要修改的区域外,子操作避免扩张到无关单元格 / 列 / Sheet。规划 range 时先确认每个子操作的边界。
|
|
8
|
-
2.
|
|
8
|
+
2. **批次完成后按子操作验证**:单元格写入/清除→`+cells-get`/`+csv-get`;对象 CRUD→对应 `+*-list`;sheet CRUD→`+workbook-info`;尺寸/隐藏/冻结/分组/合并→`+sheet-info`;网格线显隐这类没有回读接口的状态按子操作返回确认即可。至少覆盖首、中、末和用户点名项,不能只做统一 cells 抽样。
|
|
9
9
|
3. **预期条数前置断言**:涉及"批量填充 N 行"或"对 M 个区域分别写入"时,建议先把 N、M 硬编码进代码,回读后比较实际与预期;不一致就优先再发一轮 `+batch-update` 补齐,补不齐则在交付说明里列出缺口。
|
|
10
10
|
4. **三条工具硬约束**:`--yes` 必带(high-risk-write,不带退出码 10);单次 ≤100 条 operations,超出按批拆分;`+cells-batch-set-style` / `+cells-batch-clear` 等批量类 shortcut 不可嵌入 operations(它们本身就是批量原子操作,直接顶层调用)。
|
|
11
11
|
|
|
12
|
-
若本次 `+batch-update`
|
|
12
|
+
若本次 `+batch-update` 的任一子操作写入了公式、复制了公式模板、或导入了含公式的数据块,回读之外必须对本次公式范围逐段执行 `+formula-verify --exit-on-error`;`partial` 拆分续扫,全部分段 `status='success'` 后才完成。`+batch-update` 只保证写入动作按序执行,不保证公式运行结果 zero-error。AI 公式改走 `+formula-verify --ai-only`,按 `references/lark-sheets-formula-verify.md` 的全区间一次异步状态检查规则交付(`failed` / `unsupported` 先修,只剩 pending 可交付并说明后台仍在计算)。
|
|
13
13
|
|
|
14
14
|
## 使用场景
|
|
15
15
|
|
|
16
16
|
写入。把**跨类型、有顺序依赖**的多个写入操作合并为一次请求按序执行(如插列 → 写表头 → 回填数据)。注意:不支持嵌套 `+batch-update`。
|
|
17
17
|
|
|
18
|
-
**先分流再动手(按操作组合选入口)**:美化收尾(样式 / 合并 / 行高列宽 / 冻结的任意组合)→ 一次 `+styles-put`(声明式规格,见 `lark-sheets-styles-put`),不要拼 `--operations` 子操作数组;**同一个写操作**打多个区域 → 用该命令自身的复数形态(`+cells-set --writes` / `+cells-batch-clear` / `+dim-delete --ranges` / resize 的 map 形态等);只有跨类型、有顺序依赖的操作链才用本命令。
|
|
18
|
+
**先分流再动手(按操作组合选入口)**:美化收尾(样式 / 合并 / 行高列宽 / 冻结的任意组合)→ 一次 `+styles-put`(声明式规格,见 `references/lark-sheets-styles-put.md`),不要拼 `--operations` 子操作数组;**同一个写操作**打多个区域 → 用该命令自身的复数形态(`+cells-set --writes` / `+cells-batch-clear` / `+dim-delete --ranges` / resize 的 map 形态等);只有跨类型、有顺序依赖的操作链才用本命令。
|
|
19
19
|
|
|
20
|
-
**⚠️
|
|
20
|
+
**⚠️ 优先使用 `+batch-update` 的场景**:
|
|
21
21
|
- 需要先插入行列再写入数据时(`+dim-{insert|delete|hide|unhide|freeze|group|ungroup}` + `+cells-set`)
|
|
22
22
|
- 需要对多个区域执行**不同类型**的写入操作时(如 `+cells-set` + `+cells-clear` 组合)。同一个写操作打多区域用该命令自身的复数形态、多区域 merge 用 `+styles-put` 的 `cell_merges`、大范围 unmerge 直接单次调用——均见上方分流,不进本命令
|
|
23
23
|
|
|
@@ -25,16 +25,16 @@
|
|
|
25
25
|
|
|
26
26
|
**不可放进 `--operations` 的写 shortcut**(`shortcut` 枚举不含它们,强行写入会被校验拒):`+cells-set-image`(需本地上传图片)、`+styles-put` / `+dropdown-update` / `+dropdown-delete` / `+cells-batch-clear`(自身已是批量入口,不可再嵌套)、`+dim-move`。这些操作需在 `+batch-update` 之外单独调用。
|
|
27
27
|
|
|
28
|
-
**行高列宽批量不走这里**:多行 / 多列不同尺寸用 `+styles-put` 的 `row_sizes` / `col_sizes`(可与样式同批),或 `+rows-resize --heights` / `+cols-resize --widths` 的 map 形态(见 `lark-sheets-range-operations`);map 形态不可作为 `--operations` 子操作嵌入(子操作里仍可用单区间形态 `range` + `height`/`width`)。
|
|
28
|
+
**行高列宽批量不走这里**:多行 / 多列不同尺寸用 `+styles-put` 的 `row_sizes` / `col_sizes`(可与样式同批),或 `+rows-resize --heights` / `+cols-resize --widths` 的 map 形态(见 `references/lark-sheets-range-operations.md`);map 形态不可作为 `--operations` 子操作嵌入(子操作里仍可用单区间形态 `range` + `height`/`width`)。
|
|
29
29
|
|
|
30
30
|
**执行语义(fail-fast;失败后哪些已生效取决于批次构成)**:默认首个失败的子操作即中断剩余操作。此前的子操作**是否已落盘不统一**:纯单元格 / 行列结构类写入在提交前只累计在内存,失败时整体不落盘(等效回滚);而图表 / 透视表等对象类子操作执行时会**先把此前累计的写入提交落盘再创建对象**——批次含这类子操作时,失败前完成的部分(含其之前的普通写入)已实际生效、无法回滚。因此失败后**不要假设"全部回滚"或"全部保留"**:先看返回 `results` 里各子操作的状态,再回读现状(行列数 / 目标格 / `+chart-list` 等对象清单)确认已生效集合,只补发未生效部分——盲目整批重发会重复应用已生效操作(如插行 / 建图),盲目只发失败尾可能写到未生效的旧结构上。传 `--continue-on-error` 则遇失败仍继续执行剩余操作,已成功部分保留(返回 "N succeeded, M failed")。
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
- 写前:先读 `lark-sheets-formula-translation`,把公式改写成飞书可执行语义。
|
|
32
|
+
**公式相关批处理的完成流程**:
|
|
33
|
+
- 写前:先读 `references/lark-sheets-formula-translation.md`,把公式改写成飞书可执行语义。
|
|
34
34
|
- 写时:用 `+batch-update` 一次性完成插行/写公式/复制模板等成套动作。
|
|
35
|
-
-
|
|
35
|
+
- 写后:回读关键公式,并对本次公式范围逐段运行 `+formula-verify --exit-on-error`,全部 success 后完成;AI 公式改用 `+formula-verify --ai-only`,按 `references/lark-sheets-formula-verify.md` 的全区间一次异步状态检查规则交付。
|
|
36
36
|
|
|
37
|
-
**`+dropdown-update` 的选项模式(`--options` / `--source-range` 二选一)+ 配色规则**(更新会重写完整验证规则;需要保留已有配色时先回读并透传 `--colors`)见 [`lark-sheets-write-cells`](
|
|
37
|
+
**`+dropdown-update` 的选项模式(`--options` / `--source-range` 二选一)+ 配色规则**(更新会重写完整验证规则;需要保留已有配色时先回读并透传 `--colors`)见 [`references/lark-sheets-write-cells.md`](lark-sheets-write-cells.md) 的「Dropdown 选项 + 配色」节,本文不重复。`+dropdown-delete` 不涉及这些 flag。
|
|
38
38
|
|
|
39
39
|
## Shortcuts
|
|
40
40
|
|
|
@@ -221,4 +221,4 @@ lark-cli sheets +cells-batch-clear --url "..." \
|
|
|
221
221
|
|
|
222
222
|
- `Validate`:`+batch-update` 的 `--operations` 必须合法 JSON,且为非空数组;逐个子操作 `shortcut` / `input` 字段必填校验,input 键必须在该 shortcut 的 flag 词汇表内(未知键报错并提示最近似键与完整键契约);**校验错误聚合上报**——所有子操作的首错一次性返回,全部修完再重发一次即可;**禁止嵌套 `+batch-update`**。`+cells-batch-clear` 的 `--ranges` 必须 JSON 数组、每项带 sheet 前缀,`high-risk-write` 强制 `--yes` 或 `--dry-run`(`--scope` 默认 `content`)。
|
|
223
223
|
- `DryRun`:按顺序输出每个子操作的目标 API + 请求 body 模板,不发起调用。
|
|
224
|
-
- `Execute`:按声明顺序串行执行;默认 fail-fast
|
|
224
|
+
- `Execute`:按声明顺序串行执行;默认 fail-fast。失败时已成功子操作不回滚,先按子操作类型回读现状,只重发失败起的剩余子集;成功时也完成上述分流验证。
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
|
|
33
33
|
普通创建、数据源修正和常用配置更新不要构造原始 snapshot。
|
|
34
34
|
|
|
35
|
-
典型工作流:先确认表头、精确数据范围和图表配置,运行 `
|
|
35
|
+
典型工作流:先确认表头、精确数据范围和图表配置,运行 `python3 scripts/lark_chart_size_advisor.py` 取得建议尺寸,再将返回的 `data.create_flags.width` / `height` 原样传给 `+chart-create-basic`;创建时尽量在同次调用中带上已知标题/轴/标签内容要求,标签位置只有用户明确指定时才传。创建后用返回的完整 `snapshot` 检查范围、方向与系列,再按需用 `+chart-list` 验证。已有图表的数据范围或方向错误时用 `+chart-data-update`,常用配置修正用 `+chart-config-update`。只有用户要求单个系列、数据点或高级引擎字段时,才读取现有 snapshot 并调 `+chart-update --properties`。不要为了常用配置先输出整份 schema,也不要删除重建已经创建成功的图表。
|
|
36
36
|
|
|
37
37
|
**多图表工作流**:先完成所有辅助数据和表头,列出每张目标图的类型、精确数据范围、标题和落点;确认清单后,用一次 `+batch-chart-create` 批量创建。它的每个 operation 直接填写 `+chart-create-basic` flags,CLI 内部固定按 `+chart-create-basic` 执行,不要再套 `shortcut` / `input`。图表之间独立时允许部分成功:按返回的逐项结果定位失败图表,只重试失败项。批量 create 的逐项结果不返回完整 snapshot;批次后每个受影响的 sheet 各调用一次 `+chart-list`。已经成功创建的图表有数据源或配置差异时,用 `+batch-chart-update` 批量执行对应的语义更新,不要删除重建。
|
|
38
38
|
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
4. 建好真图表后,必须先用创建返回的完整 `snapshot` 或 `+chart-list` 确认图表数量、标题、数据源、系列和位置正确,再按 [Lark Sheet Float Image](./lark-sheets-float-image.md) 的高风险删除流程用 `+float-image-delete` 删除与其一一对应的原浮动图片。
|
|
59
59
|
5. 删除后再调用一次 `+float-image-list`,确认被替换图片已消失,其它图片未受影响。
|
|
60
60
|
|
|
61
|
-
**数量词必须展开**:用户说“每个 / 每天 / 分别 / 逐一 / 各一张图”时,先从数据中数出实体数 `N`,把这 `N` 张图逐项写进清单,再加上其它汇总图得到目标总数 `M`;一个包含全部实体的多系列图不能替代这 `N` 张独立图。批次前断言 operations 中恰有 `M`
|
|
61
|
+
**数量词必须展开**:用户说“每个 / 每天 / 分别 / 逐一 / 各一张图”时,先从数据中数出实体数 `N`,把这 `N` 张图逐项写进清单,再加上其它汇总图得到目标总数 `M`;一个包含全部实体的多系列图不能替代这 `N` 张独立图。批次前断言 operations 中恰有 `M` 个图表创建,批次后 `+chart-list` 断言图表总数、逐图标题与实体集合一致。**图表类型和维度也要逐图断言**:用户点名的图表类型(折线 / 柱状 / 堆积 / 饼)、横轴取哪一列、按哪一列分组,动手前写成清单,画完逐项核回来——多张单维度图不能替代一张按维度分组的图,反之亦然。
|
|
62
62
|
|
|
63
63
|
**范围与系列前置校验(创建前必做)**:清单中同时记录每张图的表头范围、纳入维度、明确排除维度、数据方向和预期系列数。每张图只支持一个类别 / X 轴维度(`dim1`),不支持把多个字段作为多级横轴;当前每张图**最多 50 个数值系列**;按列组织时通常为“所选数值列数”,按行组织时通常为“所选数值行数”。创建时就用 `+chart-create-basic --dim1-index ... --dim2-indexes ...` 显式选择类别与不超过 50 个数值系列;如果业务要求展示超过 50 个系列,应先建立紧凑汇总表或 Top-N,而不是反复删除重建。创建前根据实际表头确认索引和边界,不凭字母猜范围;创建后范围、方向或系列数不符时,使用 `+chart-data-update` 修正,CLI 会读取当前快照、重建 `refs` / `dim1` / `dim2.series` 并只提交 data patch,不要删除后重建。
|
|
64
64
|
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
| 饼图 | `720 × 440` |
|
|
74
74
|
|
|
75
75
|
```bash
|
|
76
|
-
|
|
76
|
+
python3 scripts/lark_chart_size_advisor.py "<表格 URL 或 spreadsheet token>" \
|
|
77
77
|
--worksheet-id "<reference_id>" \
|
|
78
78
|
--chart-type column --data-range "'Sheet1'!A1:C10" \
|
|
79
79
|
--dim1-index 1 --dim2-indexes 2,3 \
|
|
@@ -146,7 +146,7 @@ python scripts/lark_chart_size_advisor.py "<表格 URL 或 spreadsheet token>" \
|
|
|
146
146
|
3. **校验**:`position.row + needRows ≤ rowCount` 且 `col_idx + needCols ≤ columnCount`(`position.row` 为 **0-based**:首行 = `row:0`,与 A1 区间 / `+dim-insert --position` 的 1-based 行号不同;col 按 A=0、B=1、…、Z=25、AA=26… 换算)。
|
|
147
147
|
4. **不够就先扩表**,二选一,禁止硬塞越界位置:
|
|
148
148
|
- **优先**放数据下方空区:`position = {row: data_end_row + 2, col: "A"}`;
|
|
149
|
-
- 否则先调 `+dim-insert`(`lark-sheets-sheet-structure`)扩行/列,再 create。
|
|
149
|
+
- 否则先调 `+dim-insert`(`references/lark-sheets-sheet-structure.md`)扩行/列,再 create。
|
|
150
150
|
|
|
151
151
|
⚠️ **图表落点禁止压在已有数据矩形内**——必须落在数据区**右侧或下方的空白**,否则图表浮层会遮挡原始数据被判失败(反例:折线图落在数据区中间,遮挡了下方原始数据)。
|
|
152
152
|
|
|
@@ -163,7 +163,7 @@ python scripts/lark_chart_size_advisor.py "<表格 URL 或 spreadsheet token>" \
|
|
|
163
163
|
|
|
164
164
|
1. **数量**:图表数 = 用户明确要求的数量("每个 / 分别 / 逐一"等数量词已逐项展开为独立图,不用一张多系列图代替)。
|
|
165
165
|
2. **文案与展示项**:回读图表标题、副标题和坐标轴标题,确认语义准确且无乱码、占位符或空括号;图例按用户要求展示或隐藏,普通基础图的数据标签默认展示;密集时按“建议尺寸 → 稀疏标签 → Top-N / 拆图”处理。辅助系列不得用全点重复标签模拟单点或末点。带坐标轴的图表还要回读每条轴的字段语义、类型、单位、最小值 / 最大值、刻度以及主副轴归属;多图对比时再核对边界、跨度和口径是否符合用户的可比性要求。
|
|
166
|
-
3. **图表质量**:图表创建、配置更新、数据更新或位置调整后,每个受影响子表运行一次 `
|
|
166
|
+
3. **图表质量**:图表创建、配置更新、数据更新或位置调整后,每个受影响子表运行一次 `python3 scripts/lark_chart_quality_check.py "<表格 URL 或 spreadsheet token>" --worksheet-id "<reference_id>"`,无需先用 `ls` 探测脚本。检查器覆盖几何重叠、遮挡内容、越界、最小尺寸、数值源格式、全零/空系列和常量系列重复标签。动态数值源只采样每系列前 50 点,每张图累计最多读取 2000 个源单元格(含表头和系列间空隙);`numeric_source_samples` 给出实际范围与采样点数,不续读剩余数据。仅采样为全零/常量但未覆盖完整系列时列为不可验证,不能据此修改整个系列。`data.passed=true` 且退出码为 `0` 表示已完成检查范围内无问题,不能视为未采样数据也正常。退出码 `2` 表示检查成功发现问题,按返回的修复建议调整后重跑;退出码 `1`、网络超时或无有效 JSON 时只重试一次,仍失败则明确报告质量检查未完成,禁止用人工估算代替。
|
|
167
167
|
|
|
168
168
|
## Shortcuts
|
|
169
169
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
飞书表格的"颜色标记"语义 = 条件格式规则 ≠ 静态背景色。如果用 `+cells-set` 写静态,源数据变化时颜色不会跟着变(典型反例:用户要求"过期单元格标红"时,模型用静态填充——日期变化后单元格颜色不再准确反映过期状态)。
|
|
14
14
|
|
|
15
|
-
**判断标准**:交付后 `+cond-format-list`
|
|
15
|
+
**判断标准**:交付后 `+cond-format-list` 必须能返回该规则,否则条件格式未生效。
|
|
16
16
|
|
|
17
17
|
**大数据量首选**:当数据量 > 1000 行时,条件格式是首选——它由飞书自身渲染,比"本地脚本逐行计算 + `+cells-set` 写静态背景色"更高效、更稳(颜色还能随源数据自动联动)。
|
|
18
18
|
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
|
|
48
48
|
**正确做法(两步走)**:
|
|
49
49
|
|
|
50
|
-
Step 1 的 `+cells-set` 及 `--copy-to-range` 等 flag 以 `lark-sheets-write-cells` 为准。
|
|
50
|
+
Step 1 的 `+cells-set` 及 `--copy-to-range` 等 flag 以 `references/lark-sheets-write-cells.md` 为准。
|
|
51
51
|
|
|
52
52
|
```
|
|
53
53
|
Step 1: `+cells-set` 在新列写判断公式(形成"是/否"或布尔辅助列)
|
|
@@ -209,10 +209,10 @@ lark-cli sheets +cells-get --url "..." --sheet-id "$SID" \
|
|
|
209
209
|
lark-cli sheets +cond-format-delete --url "..." --sheet-id "$SID" --rule-id "$RULE_ID" --yes
|
|
210
210
|
```
|
|
211
211
|
|
|
212
|
-
> 一次只删一个 `--rule-id`。要删**多个**条件格式时,先 `+cond-format-list` 拿到各 `rule-id`,再用 `+batch-update` 把多个 `+cond-format-delete` 合并为单次批量提交(fail-fast,失败处置见 `lark-sheets-batch-update`),不要逐个调用。
|
|
212
|
+
> 一次只删一个 `--rule-id`。要删**多个**条件格式时,先 `+cond-format-list` 拿到各 `rule-id`,再用 `+batch-update` 把多个 `+cond-format-delete` 合并为单次批量提交(fail-fast,失败处置见 `references/lark-sheets-batch-update.md`),不要逐个调用。
|
|
213
213
|
|
|
214
214
|
### Validate / DryRun / Execute 约束
|
|
215
215
|
|
|
216
216
|
- `Validate`:XOR 公共四件套;`--rule-type` / `--ranges` 必填;`--properties` 必须能解析为合法 JSON;按 `--rule-type` 检查必填子字段(`cellIs` 需 `attrs.operator` + `attrs.value`、`expression` 需 `attrs.formula`、`colorScale` 需 `min/mid/max` 配色等);`+cond-format-delete` 强制 `--yes` 或 `--dry-run`。
|
|
217
217
|
- `DryRun`:写操作输出"将要 POST/PATCH/DELETE 的 conditional_format 请求模板"。
|
|
218
|
-
- `Execute
|
|
218
|
+
- `Execute`:写后不自动回读;create/update 后必须调用 `+cond-format-list --rule-id <id>` 比对规则 / 范围 / 样式,并用 `+cond-format-result-get --range <2–3 个哨兵格>` 核对实际生效的单元格样式;delete 后 list 确认目标 id 不存在。
|
|
@@ -134,4 +134,4 @@ lark-cli sheets +filter-view-create --url "..." --sheet-id "$SID" \
|
|
|
134
134
|
|
|
135
135
|
- `Validate`:XOR 公共四件套;`+filter-view-create` 校验 `--range` 起始行为表头(第一行);`+filter-view-update` 必须先 `+filter-view-list` 确认 view 存在,`--properties` 必传(整组覆盖式);`+filter-view-delete` 强制 `--yes` 或 `--dry-run`。
|
|
136
136
|
- `DryRun`:输出"将要 POST/PATCH/DELETE 的 view 请求模板",零网络副作用;`--sheet-name` 在 dry-run 输出里生成为 `<resolve:Sheet1>` 占位符。
|
|
137
|
-
- `Execute
|
|
137
|
+
- `Execute`:写后不自动回读;create/update 后必须调用 `+filter-view-list --view-id <id>` 比对 range + rules;delete 后 list 确认目标 view 不存在。
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
典型工作流:先读取现有筛选器了解配置 → 执行创建/更新/删除 → **必须再次读取验证结果**。
|
|
19
19
|
|
|
20
|
-
**只读场景例外**:用户只是想知道哪些数据满足条件、并不要求修改表格展示时,可以走 `lark-sheets-read-data` 读后文本回答,不必创建筛选器。
|
|
20
|
+
**只读场景例外**:用户只是想知道哪些数据满足条件、并不要求修改表格展示时,可以走 `references/lark-sheets-read-data.md` 读后文本回答,不必创建筛选器。
|
|
21
21
|
|
|
22
22
|
**常见配置错误(必须注意)**:
|
|
23
23
|
- **筛选范围必须覆盖表头行**:筛选器的 range 必须从表头行开始(如 `A1:F100`),不能只包含数据行。缺少表头会导致筛选条件无法正确匹配列
|
|
@@ -127,4 +127,4 @@ lark-cli sheets +filter-delete --url "..." --sheet-id "$SID" --yes
|
|
|
127
127
|
|
|
128
128
|
- `Validate`:XOR 公共四件套;`+filter-create` 校验 `--range` 至少 2 行(表头 + 至少 1 行数据);`+filter-update` 必须先 `+filter-list` 确认目标存在;`+filter-delete` 强制 `--yes` 或 `--dry-run`。
|
|
129
129
|
- `DryRun`:输出"将要 POST/PATCH/DELETE 的 filter 请求模板"。
|
|
130
|
-
- `Execute
|
|
130
|
+
- `Execute`:写后不自动回读;create/update 后必须调用 `+filter-list` 核对 range、rules 与已过滤行数;delete 后 list 确认筛选器不存在。
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
典型工作流:先读取现有浮动图片了解配置 → 执行创建/更新/删除 → **必须再次读取验证结果**。
|
|
22
22
|
|
|
23
23
|
**常见配置错误(必须注意)**:
|
|
24
|
-
- **单元格图片 vs
|
|
24
|
+
- **单元格图片 vs 浮动图片选择错误**:图与某条记录一一对应、要随行排序 / 筛选 / 增删时,应走 `+cells-set-image`(见顶部判别),用浮动图会错位。
|
|
25
25
|
- **图片位置参数要精确**:锚点单元格的行列索引和偏移量决定了图片位置,设置不当会导致图片遮挡数据
|
|
26
26
|
- **创建后必须验证**:调用 `+float-image-list` 确认图片位置和大小正确
|
|
27
27
|
|
|
@@ -156,4 +156,4 @@ lark-cli sheets +float-image-delete --url "..." --sheet-id "$SID" --float-image-
|
|
|
156
156
|
|
|
157
157
|
- `Validate`:XOR 公共四件套;`+float-image-create` 要求 `--image` / `--image-token` / `--image-uri` **恰好给一个**,`--position-row/col` 与 `--size-width/height` 必填且为合法整数;传 `--image` 时还会校验路径安全(绝对路径 / 越出工作目录会被拒,`--dry-run` 同样拦)。`+float-image-update` 必须 `--float-image-id`,并和 create 一样必填 `--image-name` / `--position-{row,col}` / `--size-{width,height}`(缺任一核心字段本地直接报错,不会静默发 0);图片源 `--image-token` / `--image-uri` 可省(省略保留原图),给则二选一;`+float-image-delete` 强制 `--yes` 或 `--dry-run`。
|
|
158
158
|
- `DryRun`:写操作输出"将要 POST/PATCH/DELETE 的 float_image 请求模板";传 `--image` 时会多打印一步本地图片上传(`POST /open-apis/drive/v1/medias/upload_all`,`parent_type=sheet_image`)。
|
|
159
|
-
- `Execute
|
|
159
|
+
- `Execute`:写后不自动回读;create/update 后必须调用 `+float-image-list --float-image-id <id>` 比对位置与尺寸(它不回传 `image_name`,名称无从核对);delete 后 list 确认目标不存在。
|