@amaster.ai/pi-lark 0.1.13 → 0.1.15

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.
Files changed (74) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/references/lark-apps-local-dev.md +1 -1
  3. package/skills/lark-base/SKILL.md +4 -3
  4. package/skills/lark-base/references/lark-base-app.md +2 -2
  5. package/skills/lark-base/references/lark-base-dashboard-block-config.md +1 -1
  6. package/skills/lark-base/references/lark-base-workflow-schema.md +92 -14
  7. package/skills/lark-base/references/lark-base-workflow.md +99 -3
  8. package/skills/lark-calendar/SKILL.md +55 -22
  9. package/skills/lark-calendar/references/lark-calendar-list-attendees.md +33 -0
  10. package/skills/lark-calendar/references/lark-calendar-meeting-relation.md +99 -0
  11. package/skills/lark-calendar/references/lark-calendar-meeting.md +1 -1
  12. package/skills/lark-calendar/references/lark-calendar-recurring.md +64 -66
  13. package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +7 -1
  14. package/skills/lark-doc/SKILL.md +1 -1
  15. package/skills/lark-doc/references/lark-doc-create-workflow.md +8 -10
  16. package/skills/lark-doc/references/lark-doc-script.md +11 -17
  17. package/skills/lark-drive/references/lark-drive-comment-location.md +1 -1
  18. package/skills/lark-drive/references/lark-drive-inspect.md +1 -1
  19. package/skills/lark-drive/references/lark-drive-permission-guide.md +1 -1
  20. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +1 -1
  21. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +1 -1
  22. package/skills/lark-im/SKILL.md +7 -1
  23. package/skills/lark-im/references/lark-im-chat-messages-list.md +6 -1
  24. package/skills/lark-im/references/lark-im-messages-mget.md +19 -2
  25. package/skills/lark-im/references/lark-im-messages-resources-download.md +3 -1
  26. package/skills/lark-im/references/lark-im-messages-search.md +1 -1
  27. package/skills/lark-im/references/lark-im-threads-messages-list.md +5 -1
  28. package/skills/lark-mail/SKILL.md +19 -8
  29. package/skills/lark-mail/references/lark-mail-draft-create.md +1 -1
  30. package/skills/lark-mail/references/lark-mail-draft-edit.md +1 -1
  31. package/skills/lark-mail/references/lark-mail-forward.md +1 -1
  32. package/skills/lark-mail/references/lark-mail-reply-all.md +1 -1
  33. package/skills/lark-mail/references/lark-mail-reply.md +1 -1
  34. package/skills/lark-mail/references/lark-mail-rules.md +87 -4
  35. package/skills/lark-mail/references/lark-mail-send.md +1 -1
  36. package/skills/lark-mail/references/lark-mail-thread-modify.md +73 -0
  37. package/skills/lark-mail/references/lark-mail-thread-trash.md +62 -0
  38. package/skills/lark-mail/references/lark-mail-watch.md +1 -1
  39. package/skills/lark-meeting/SKILL.md +2 -2
  40. package/skills/lark-meeting/references/lark-minutes-search.md +2 -2
  41. package/skills/lark-meeting/references/lark-vc-meeting-events.md +3 -2
  42. package/skills/lark-meeting/references/lark-vc-search.md +10 -7
  43. package/skills/lark-meeting/scenes/create-and-edit-minutes.md +4 -0
  44. package/skills/lark-meeting/scenes/query-meeting-and-artifacts.md +3 -3
  45. package/skills/lark-okr/SKILL.md +38 -29
  46. package/skills/lark-okr/references/lark-okr-comment-create.md +103 -0
  47. package/skills/lark-okr/references/lark-okr-comment-delete.md +59 -0
  48. package/skills/lark-okr/references/lark-okr-comment-detail.md +80 -0
  49. package/skills/lark-okr/references/lark-okr-comment-get.md +66 -0
  50. package/skills/lark-okr/references/lark-okr-comment-list.md +79 -0
  51. package/skills/lark-okr/references/lark-okr-comment-patch.md +73 -0
  52. package/skills/lark-okr/references/lark-okr-comment-solve-reopen.md +83 -0
  53. package/skills/lark-okr/references/lark-okr-entities.md +66 -2
  54. package/skills/lark-shared/references/lark-wiki-token-routing.md +7 -7
  55. package/skills/lark-sheets/SKILL.md +4 -1
  56. package/skills/lark-sheets/references/lark-sheets-batch-update.md +3 -3
  57. package/skills/lark-sheets/references/lark-sheets-chart.md +66 -32
  58. package/skills/lark-sheets/references/lark-sheets-legacy-command-migration.md +152 -0
  59. package/skills/lark-sheets/references/lark-sheets-read-data.md +2 -2
  60. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +6 -3
  61. package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -17
  62. package/skills/lark-sheets/scripts/lark_chart_quality_check.py +1524 -0
  63. package/skills/lark-sheets/scripts/lark_chart_size_advisor.py +408 -0
  64. package/skills/lark-sheets/scripts/lark_chart_size_rules.py +292 -0
  65. package/skills/lark-slides/references/cli/lark-slides-add-slide.md +1 -1
  66. package/skills/lark-slides/references/cli/lark-slides-media-upload.md +1 -1
  67. package/skills/lark-slides/references/cli/lark-slides-replace-slide.md +1 -1
  68. package/skills/lark-slides/references/xml/slides_xml_schema_definition.xml +333 -20
  69. package/skills/lark-wiki/SKILL.md +1 -2
  70. package/skills/lark-wiki/references/lark-wiki-move.md +3 -2
  71. package/skills/lark-wiki/references/lark-wiki-node-create.md +3 -2
  72. package/skills/lark-wiki/references/lark-wiki-node-delete.md +8 -4
  73. package/skills/lark-wiki/references/lark-wiki-node-get.md +7 -4
  74. package/skills/lark-sheets/scripts/lark_chart_layout_check.py +0 -472
@@ -0,0 +1,83 @@
1
+ # okr +comment-solve / +comment-reopen
2
+
3
+ > **前置条件:** 先阅读 [lark-shared/SKILL.md](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则;
4
+
5
+ 解决/重新打开一条评论。实体级评论按单条评论处理;划词评论则是操作整个评论串。只支持 user 身份。
6
+
7
+ ## 推荐命令
8
+
9
+ ```bash
10
+ # 解决实体级评论或整个划词评论串。
11
+ lark-cli okr +comment-solve --comment-id 7000000000000000004
12
+
13
+ # 重新打开已解决的实体级评论或划词评论串。
14
+ lark-cli okr +comment-reopen --comment-id 7000000000000000004
15
+
16
+ # 预览解决评论的状态变更请求,不实际执行。
17
+ lark-cli okr +comment-solve --comment-id 7000000000000000004 --dry-run
18
+ ```
19
+
20
+ ## 参数
21
+
22
+ | 参数 | 必填 | 默认值 | 说明 |
23
+ |----------------|------|---------|---------------------------------------------------------------------------------------|
24
+ | --comment-id | 是 | — | 评论 ID,int64 正整数。可从 +comment-list、+comment-detail 或 +comment-get 获取。 |
25
+ | --user-id-type | 否 | open_id | open_id、union_id、user_id 或 user_key。 |
26
+ | --style | 否 | simple | affected_comments 的正文风格:simple(SemiPlainContent)或 richtext(ContentBlock)。 |
27
+ | --dry-run | 否 | — | 预览 API 调用而不实际执行。 |
28
+ | --format | 否 | json | 输出格式。 |
29
+
30
+ ## 工作流程
31
+
32
+ 1. 使用 [+comment-list](lark-okr-comment-list.md)、[+comment-detail](lark-okr-comment-detail.md) 或 [+comment-get](lark-okr-comment-get.md) 获取并确认 comment-id。
33
+ 2. 检查评论是否属于划词串:如果返回有 selection.id,solve/reopen 会影响同一 selection.id 下的全部评论。
34
+ 3. 根据用户动作选择 +comment-solve 或 +comment-reopen;先用 --dry-run 检查目标接口。
35
+ 4. 执行后检查 affected_comments,确认实体级评论或整条评论串的状态变化范围。
36
+
37
+ ## 输出
38
+
39
+ 返回 JSON:
40
+
41
+ ```json
42
+ {
43
+ "affected_comments": [
44
+ {
45
+ "id": "7000000000000000004",
46
+ "target": {
47
+ "target_type": "objective",
48
+ "target_id": "2345678901234567890"
49
+ },
50
+ "commentator_id": "ou_xxx",
51
+ "status": "solved",
52
+ "create_time": "2025-01-15 10:30:00",
53
+ "update_time": "2025-01-15 11:30:00",
54
+ "selection": {
55
+ "id": "8000000000000000001",
56
+ "selected_text": "提升核心接口稳定性"
57
+ },
58
+ "content": {
59
+ "text": "请补充指标", "mention": [], "docs": [], "images": []
60
+ }
61
+ }
62
+ ],
63
+ "style": "simple"
64
+ }
65
+ ```
66
+
67
+ - +comment-solve 成功后 affected_comments 的 status 通常为 solved;+comment-reopen 成功后通常为 open。
68
+ - simple 风格返回 SemiPlainContent;richtext 风格返回 ContentBlock。
69
+
70
+ ## 注意事项
71
+
72
+ - 划词评论按评论串解决/重开,但 [+comment-delete](lark-okr-comment-delete.md) 仍然只删除单条评论。
73
+ - 解决不是删除,之后可以用 +comment-reopen 恢复;删除后不可恢复。
74
+ - 该操作是写操作,执行前应确认 comment-id 和目标动作。
75
+
76
+ ## 参考
77
+
78
+ - [lark-okr](../SKILL.md) — OKR 命令、路由和通用约定
79
+ - [OKR 实体定义](lark-okr-entities.md) — Comment、评论串和状态规则
80
+ - [ContentBlock 格式](lark-okr-contentblock.md) — affected_comments 正文格式
81
+ - [okr +comment-get](lark-okr-comment-get.md) — 获取状态和 selection.id
82
+ - [okr +comment-delete](lark-okr-comment-delete.md) — 永久删除单条评论
83
+ - [lark-shared](../../lark-shared/SKILL.md) — 认证、身份、权限和安全规则
@@ -10,9 +10,12 @@ Cycle (用户周期)
10
10
  ├── KeyResult (关键结果)
11
11
  │ └── Indicator (指标)
12
12
  │ └── list<Progress> (进展记录列表)
13
+ │ └── list<Comment> (评论列表)
13
14
  └── Indicator (指标)
14
15
  └── list<Progress> (进展记录列表)
16
+ └── list<Comment> (评论列表)
15
17
 
18
+ Cycle、Progress 也可以直接挂载 Comment。
16
19
  Alignment (对齐关系): Objective ↔ Objective
17
20
  Category (分类): Objective 的分组标签
18
21
  ```
@@ -49,8 +52,11 @@ Category (分类): Objective 的分组标签
49
52
  ### 常用术语
50
53
 
51
54
  - **当前周期**: 指周期的 start_time/end_time
52
- 指周期的 start_time / end_time 所在的时间段与当前时间重叠的周期(即: start_time <= 当前时间 且 end_time >= 当前时间)。 注意:时间重叠是判断当前周期的首要且必须的硬性条件,绝对不能仅仅根据 cycle_status == 1 去判断。 如果有多个符合时间重叠标准的周期,再在这些包含当前时间的周期中过滤,保留周期状态为 default (0) 或 normal (1) 的周期。如果仍然有多个,则选择其中较新的一个。当用户提及“上一个周期”,“下一个周期”一类的表述时,通常是以当前周期为准计算。
53
- - 如果用户没有提及,那么当前周期一般不考虑年度周期(起止时间从 01-01 至 12-31 的周期)
55
+ 指周期的 start_time / end_time 所在的时间段与当前时间重叠的周期(即: start_time <= 当前时间 且 end_time >= 当前时间)。
56
+ 注意:时间重叠是判断当前周期的首要且必须的硬性条件,绝对不能仅仅根据 cycle_status == 1 去判断。
57
+ 如果有多个符合时间重叠标准的周期,再在这些包含当前时间的周期中过滤,保留周期状态为 default (0) 或 normal (1)
58
+ 的周期。如果仍然有多个,则选择其中较新的一个。当用户提及“上一个周期”,“下一个周期”一类的表述时,通常是以当前周期为准计算。
59
+ - 如果用户没有提及,那么当前周期一般不考虑年度周期(起止时间从 01-01 至 12-31 的周期)
54
60
  - **所有者**: 绝大多数所有者都是用户,少部分租户启用了“团队OKR”功能,所有者可能是部门。用户身份下,只能编辑所有者为当前用户的
55
61
  OKR。
56
62
 
@@ -173,6 +179,64 @@ Category (分类): Objective 的分组标签
173
179
  > - `okr +progress-update` [lark-okr-progress-update.md](lark-okr-progress-update.md) 更新进展记录内容
174
180
  > - `okr +progress-delete` [lark-okr-progress-delete.md](lark-okr-progress-delete.md) 删除进展记录
175
181
  > - `okr +progress-list` [lark-okr-progress-list.md](lark-okr-progress-list.md) 获取目标/关键结果下的进展记录
182
+
183
+ ---
184
+
185
+ ## Comment (评论)
186
+
187
+ 评论可以挂载在 Cycle、Objective、KeyResult 或 Progress 上,用于对 OKR 实体或正文中的一段文字进行讨论。评论分为实体级评论和划词评论两种:
188
+
189
+ - **实体级评论**:直接附着在 Cycle 或 Progress 上。一条评论就是一个评论项,solve/reopen 只影响该评论。
190
+ - **划词评论**:附着在 Objective 或 KeyResult 的正文选区上,带有 `selection`。同一个 `selection.id`
191
+ 下的评论属于同一个评论串;solve/reopen 按评论串处理,但 delete 仍然只删除指定的一条评论。
192
+
193
+ ### Comment 字段
194
+
195
+ | 字段 | 类型 | 必填 | 说明 |
196
+ |------------------|--------------------|----|-----------------------------------------------------------------------------------------------|
197
+ | `id` | `string` | 是 | 评论 ID,int64 正整数。 |
198
+ | `target` | `CommentTarget` | 是 | 评论挂载对象,包含 `target_type` 和 `target_id`。类型为 `cycle`、`progress`、`objective` 或 `key_result`。 |
199
+ | `commentator_id` | `string` | 是 | 评论者 ID,返回 ID 类型由请求参数 `user_id_type` 决定。 |
200
+ | `status` | `string` | 是 | 评论状态:`open`(打开)或 `solved`(已解决)。 |
201
+ | `create_time` | `string` | 是 | 创建时间; |
202
+ | `update_time` | `string` | 是 | 最后更新时间; |
203
+ | `content` | `ContentBlock` | 否 | 评论正文,见 [ContentBlock 定义](lark-okr-contentblock.md)。 |
204
+ | `solver_id` | `string` | 否 | 解决评论的用户 ID。 |
205
+ | `solved_time` | `string` | 否 | 评论解决时间,毫秒时间戳。 |
206
+ | `ref_comment_id` | `string` | 否 | 被引用评论 ID。Progress/Cycle 等实体级评论可用它表示回复关系;Objective/KeyResult 的划词评论创建时可用它定位已有划词串,但新评论本身不建立引用关系。 |
207
+ | `selection` | `CommentSelection` | 否 | 划词信息。实体级评论为空;划词评论包含 selection ID 和可选的选区文本。 |
208
+
209
+ ### CommentTarget (评论目标)
210
+
211
+ | 字段 | 类型 | 必填 | 说明 |
212
+ |---------------|----------|----|------------------------------------------------|
213
+ | `target_type` | `string` | 是 | `cycle`、`progress`、`objective` 或 `key_result`。 |
214
+ | `target_id` | `string` | 是 | 对应 Cycle、Progress、Objective 或 KeyResult 的 ID。 |
215
+
216
+ ### CommentSelection (划词信息)
217
+
218
+ | 字段 | 类型 | 必填 | 说明 |
219
+ |-----------------|----------|----|-----------------------------|
220
+ | `id` | `string` | 是 | 划词 ID。同一 `id` 下的评论属于同一个评论串。 |
221
+ | `selected_text` | `string` | 否 | 划词锚定的正文文字。 |
222
+
223
+ ### 评论创建与状态规则
224
+
225
+ - Cycle/Progress 创建实体级评论时不传 `selected_text`;可以通过 `ref_comment_id` 回复已有评论。
226
+ - Objective/KeyResult 创建划词评论时,`selected_text` 与 `ref_comment_id` 二选一:前者新建划词,后者将评论挂入被引用评论所属的已有划词串。shortcut
227
+ 另外提供 `--select-all` 替代 `selected_text` 以选中 O/KR 内的全部内容。
228
+ - `solve` / `reopen` 的请求参数是单条评论 ID。对实体级评论只影响该评论;对划词评论会影响整条评论串。
229
+ - `delete` 永久删除指定评论,不会连带删除同一评论串的其他评论,且删除后不可找回。
230
+
231
+ > **SHORTCUT:**
232
+ > - `okr +comment-detail` [lark-okr-comment-detail.md](lark-okr-comment-detail.md) 获取周期下全部对象的评论并按评论串整理
233
+ > - `okr +comment-list` [lark-okr-comment-list.md](lark-okr-comment-list.md) 分页获取单个评论目标下的评论
234
+ > - `okr +comment-get` [lark-okr-comment-get.md](lark-okr-comment-get.md) 获取单条评论
235
+ > - `okr +comment-create` [lark-okr-comment-create.md](lark-okr-comment-create.md) 创建评论、回复或挂入已有划词串
236
+ > - `okr +comment-patch` [lark-okr-comment-patch.md](lark-okr-comment-patch.md) 修改评论正文
237
+ > - `okr +comment-delete` [lark-okr-comment-delete.md](lark-okr-comment-delete.md) 永久删除单条评论
238
+ > - `okr +comment-solve` [lark-okr-comment-solve-reopen.md](lark-okr-comment-solve-reopen.md) 解决评论/评论串
239
+ > - `okr +comment-reopen` [lark-okr-comment-solve-reopen.md](lark-okr-comment-solve-reopen.md) 重新打开评论/评论串
176
240
  ---
177
241
 
178
242
  ## Indicator (指标)
@@ -12,22 +12,22 @@ lark-cli drive +inspect --url 'https://xxx.feishu.cn/wiki/<wiki_token>'
12
12
 
13
13
  输出中的 `type` 是底层对象类型,`token` 是后续命令应使用的 canonical token。`wiki_node` 字段保留节点侧信息,如 `space_id`、`node_token`、`obj_token`、`obj_type`。
14
14
 
15
- ## 手动方式
15
+ ## 节点详情方式
16
16
 
17
- 如果不能使用 shortcut,再调用 Wiki 节点接口:
17
+ 如果后续操作需要 Wiki 节点侧的字段,使用 `wiki +node-get`:
18
18
 
19
19
  ```bash
20
- lark-cli wiki spaces get_node --params '{"token":"<wiki_token>"}'
20
+ lark-cli wiki +node-get --node-token 'https://xxx.feishu.cn/wiki/<wiki_token>' --format json
21
21
  ```
22
22
 
23
23
  从返回值中读取:
24
24
 
25
25
  | 字段 | 含义 |
26
26
  |------|------|
27
- | `node.obj_type` | 底层对象类型,如 `docx`、`doc`、`sheet`、`bitable`、`slides`、`file`、`mindnote` |
28
- | `node.obj_token` | 底层对象 token,用于对应业务 skill 或原生 API |
29
- | `node.node_token` / `token` | Wiki 节点 token,用于 Wiki 节点层级操作 |
30
- | `node.space_id` | 所属知识空间 |
27
+ | `data.obj_type` | 底层对象类型,如 `docx`、`doc`、`sheet`、`bitable`、`slides`、`file`、`mindnote` |
28
+ | `data.obj_token` | 底层对象 token,用于对应业务 skill 或原生 API |
29
+ | `data.node_token` | Wiki 节点 token,用于 Wiki 节点层级操作 |
30
+ | `data.space_id` | 所属知识空间 |
31
31
 
32
32
  ## 路由
33
33
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lark-sheets
3
- version: 3.1.8
3
+ version: 3.1.9
4
4
  description: "飞书电子表格:创建和操作电子表格。支持创建表格、管理工作表与行列结构(增删/合并/调整尺寸/隐藏/冻结)、读写单元格(值/公式/样式/批注/单元格图片)、查找替换、多操作批量更新,以及图表、透视表、条件格式、筛选器、迷你图、浮动图片等对象的创建与维护。当用户需要创建电子表格、管理工作表、批量读写或编辑数据、统计汇总与可视化、表格美化、公式计算(含 Excel 公式迁移)、金融/财务建模(DCF、三张表、预算、Sensitivity 等)等任务时使用。若用户是想按名称或关键词搜索云空间(云盘/云存储)里的表格文件,请改用 lark-drive 的 drive +search 先定位资源。当用户给出 doubao.com 的 /sheets/ URL/token 时,也应直接使用本 skill,不要因为域名不是飞书而回退到 WebFetch;路由依据是 URL 路径模式和 token,而不是域名。"
5
5
  metadata:
6
6
  requires:
@@ -186,6 +186,7 @@ reference 分两组:先读**通用方法与规范**(横切所有任务的样
186
186
  | [Lark Sheet Float Image](references/lark-sheets-float-image.md) | 管理飞书表格中的浮动图片。当用户需要在表格中插入浮动图片、调整图片位置和大小、查看已有浮动图片、删除图片时使用。也适用于"插入图片"、"添加 logo"、"放一张图"等场景。注意:如果用户需要将图片嵌入到某个单元格内部(单元格图片),请阅读 lark-sheets-write-cells。 |
187
187
  | [Lark Sheet History](references/lark-sheets-history.md) | 查询飞书表格的历史版本并回滚到指定版本。当用户需要查看一张表的编辑历史版本列表、回滚到某个历史版本、或查询回滚的异步状态(进行中/成功/失败)时使用。回滚为异步操作,发起后通过状态查询轮询结果。仅针对飞书表格。 |
188
188
  | [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` 拆成多个命令。 |
189
190
 
190
191
  ## 公共 flag 速查
191
192
 
@@ -216,6 +217,8 @@ lark-cli sheets +csv-get --url "https://.../sheets/shtXXX" --sheet-name "<真实
216
217
  | `--print-schema` | bool | 否 | 本地打印复合 JSON flag 的 JSON Schema 并退出,不发起调用、不需要其它 required flag。搭配 `--flag-name` 指定查哪个 flag;省略时列出该 shortcut 可查询的 flag。仅对含复合 JSON flag 的 shortcut 有效。 |
217
218
  | `--flag-name` | string | 否 | 配合 `--print-schema`:flag 名不带 `--` 前缀(`cells` / `properties`)。**支持点分路径切片**:`--flag-name properties.snapshot.plotArea.axes` 只打印该子树,大 schema(chart 的 properties 约 1700 行)按需取,别整篇翻页。 |
218
219
 
220
+ > **bool flag 语法**:开启可用裸 `--flag`;显式值只用 `--flag=true` 或 `--flag=false`,不得用空格分隔。
221
+
219
222
  > ⚠️ **high-risk-write 命令清单(exit 10 强确认门禁)**:`+batch-update`、`+cells-clear`、`+cells-batch-clear`、`+sheet-delete`、`+dim-delete`、`+dropdown-delete`,以及各对象删除 `+chart-delete` / `+pivot-delete` / `+cond-format-delete` / `+filter-delete` / `+filter-view-delete` / `+sparkline-delete` / `+float-image-delete`。
220
223
  >
221
224
  > **审批协议**:先 `--dry-run` 预览、向用户展示将执行的操作与影响范围,**获得用户明确同意后**再在原命令追加 `--yes` 执行。未经用户同意不得带 `--yes`,也不得在 exit 10 后静默补 `--yes` 重试——那等于禁用门禁。完整协议见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md)。
@@ -34,7 +34,7 @@
34
34
  - 写时:用 `+batch-update` 一次性完成插行/写公式/复制模板等成套动作。
35
35
  - 写后:抽样回读之外,可继续跑 `lark-sheets-formula-verify` 做一次诊断。
36
36
 
37
- **`+dropdown-update` 的选项模式(`--options` / `--source-range` 二选一)+ 配色规则**(`--colors` 长度可短不能长、必须配 `--highlight=true` 才生效、不传按内置 10 色色板循环补色)见 [`lark-sheets-write-cells`](./lark-sheets-write-cells.md) 的「Dropdown 选项 + 配色」节,本文不重复。`+dropdown-delete` 不涉及这些 flag。
37
+ **`+dropdown-update` 的选项模式(`--options` / `--source-range` 二选一)+ 配色规则**(更新会重写完整验证规则;需要保留已有配色时先回读并透传 `--colors`)见 [`lark-sheets-write-cells`](./lark-sheets-write-cells.md) 的「Dropdown 选项 + 配色」节,本文不重复。`+dropdown-delete` 不涉及这些 flag。
38
38
 
39
39
  ## Shortcuts
40
40
 
@@ -84,8 +84,8 @@ _公共:URL/token(无 sheet 定位) · 系统:`--dry-run`_
84
84
  | --- | --- | --- | --- |
85
85
  | `--ranges` | string + File + Stdin(简单 JSON) | required | 目标范围 JSON 数组(最多 100 个,如 `["Sheet1!A2:A100","Sheet1!C2:C100"]`,前缀裸写不加引号),每项必须带 sheet 前缀;前缀必须与 sheet 真实显示名完全一致(含大小写),不接受 sheet reference_id |
86
86
  | `--options` | string + File + Stdin(复合 JSON) | xor | 下拉选项 JSON 数组,例如 `["opt1","opt2"]`。服务端不限制选项数量,也不限制单个选项长度;含逗号的选项可以接受(写入时会自动转义)。大量选项建议改用 `--source-range`。 |
87
- | `--colors` | string + File + Stdin(简单 JSON) | optional | 下拉胶囊背景色,RGB hex 数组(如 `["#1FB6C1","#F006C2"]`)。长度可短不可长——超长 Validate 拦截(`--colors length (N) must not exceed dropdown source size (M)`),未指定项按内置 10 色色板循环补色。**单独传即生效**;`--highlight=false` 时被忽略。 |
88
- | `--multiple` | bool | optional | 启用多选 |
87
+ | `--colors` | string + File + Stdin(简单 JSON) | optional | 下拉胶囊背景色,RGB hex 数组。更新会重写整条验证规则:若用户未要求重置配色,先用 `+dropdown-get` 回读并将现有 `highlight_colors` 作为本 flag 传回;省略会按内置 10 色色板重建。用户明确要求新配色或选项有清晰语义配色时,应选浅色、低饱和度背景以适配黑色文字。长度可短不可长——超长 Validate 拦截(`--colors length (N) must not exceed dropdown source size (M)`),未指定项按内置色板循环补色。单独传即生效;`--highlight=false` 时被忽略。 |
88
+ | `--multiple` | bool | optional | 启用多选。本 flag 只更新验证规则,不会写入选中值;后续用 `+cells-set` 写值时必须传 `multiple_values` 数组,不要传逗号拼接的 `value` |
89
89
  | `--highlight` | bool | optional | 下拉胶囊背景色高亮开关。**不传 = 开**(按内置 10 色色板循环上色);`--highlight=false` 关闭得到纯白下拉。配色用 `--colors` 覆盖。 |
90
90
  | `--source-range` | string | xor | listFromRange 模式的下拉源 range,A1 表示法 + sheet 前缀(如 `'Sheet1'!T1:T3`)。映射到 server `data_validation.range`,搭配 server `data_validation.type='listFromRange'` 自动生效。跟 `--options` 二选一:传 `--options` 走 inline 列表(type=list),传本 flag 走 range 引用(type=listFromRange)。`--colors` 长度规则不变(≤ 源 range 单元格数),`--highlight` / `--multiple` 行为相同。当 `--highlight` 开启且 source 覆盖单元格数超过 2000 时,服务端会将该下拉判为 option-error(这是不支持的组合);CLI 会在返回结果的 `data.warnings` 中给出 warning。如需取消,传 `--highlight=false`。 |
91
91
 
@@ -32,7 +32,7 @@
32
32
 
33
33
  普通创建、数据源修正和常用配置更新不要构造原始 snapshot。
34
34
 
35
- 典型工作流:先确认表头和精确数据范围,用 `+chart-create-basic` 一次创建并尽量在同次调用中带上已知标题/轴/标签内容要求;标签位置只有用户明确指定时才传。创建后用返回的完整 `snapshot` 检查范围、方向与系列,再按需用 `+chart-list` 验证。已有图表的数据范围或方向错误时用 `+chart-data-update`,常用配置修正用 `+chart-config-update`。只有用户要求单个系列、数据点或高级引擎字段时,才读取现有 snapshot 并调 `+chart-update --properties`。不要为了常用配置先输出整份 schema,也不要删除重建已经创建成功的图表。
35
+ 典型工作流:先确认表头、精确数据范围和图表配置,运行 `python 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
 
@@ -60,13 +60,33 @@
60
60
 
61
61
  **数量词必须展开**:用户说“每个 / 每天 / 分别 / 逐一 / 各一张图”时,先从数据中数出实体数 `N`,把这 `N` 张图逐项写进清单,再加上其它汇总图得到目标总数 `M`;一个包含全部实体的多系列图不能替代这 `N` 张独立图。批次前断言 operations 中恰有 `M` 个图表创建,批次后断言图表总数、逐图标题与实体集合一致。
62
62
 
63
- **范围与系列前置校验(创建前必做)**:清单中同时记录每张图的表头范围、纳入维度、明确排除维度、数据方向和预期系列数。当前每张图**最多 50 个数值系列**;按列组织时通常为“所选数值列数”,按行组织时通常为“所选数值行数”。创建时就用 `+chart-create-basic --dim1-index ... --dim2-indexes ...` 显式选择类别与不超过 50 个数值系列;如果业务要求展示超过 50 个系列,应先建立紧凑汇总表或 Top-N,而不是反复删除重建。创建前根据实际表头确认索引和边界,不凭字母猜范围;创建后范围、方向或系列数不符时,使用 `+chart-data-update` 修正,CLI 会读取当前快照、重建 `refs` / `dim1` / `dim2.series` 并只提交 data patch,不要删除后重建。
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
 
65
- **坐标轴语义与范围**:所有带坐标轴的图表都要在清单中记录每条轴对应的字段语义、类别轴 / 连续轴类型、单位、边界、刻度间隔以及主副轴归属,不能只核对轴标题。多图对比时,先判断“范围 / 尺度一致”指绝对边界相同,还是跨度和刻度可比;用户未明确要求所有图共用相同最小值和最大值时,不要默认使用各数据子集的并集边界。按连续区间分图时,各图使用自己的区间边界并保持跨度和刻度可比;对比同一指标时保持值轴口径一致,不同单位或量级的指标不强行共用边界。
65
+ **尺寸建议(创建前必做)**:确认 `--chart-type`、`--data-range`、数据方向、dim1/dim2、标题、图例和标签策略后,先运行尺寸建议器。有分离表头时同时传 `--header-range`。
66
+
67
+ 硬下限如下;建议器不可用时也不得低于此值:
68
+
69
+ | 图表类型 | 最小宽度 × 高度(px) |
70
+ |---|---:|
71
+ | 柱形图、折线图、面积图及其它默认类型 | `640 × 400` |
72
+ | 条形图、组合图 | `720 × 420` |
73
+ | 饼图 | `720 × 440` |
74
+
75
+ ```bash
76
+ python scripts/lark_chart_size_advisor.py "<表格 URL 或 spreadsheet token>" \
77
+ --worksheet-id "<reference_id>" \
78
+ --chart-type column --data-range "'Sheet1'!A1:C10" \
79
+ --dim1-index 1 --dim2-indexes 2,3 \
80
+ --data-labels value --legend-position bottom --title "销售额对比"
81
+ ```
82
+
83
+ 运行建议器时,参数必须与后续创建保持一致:创建命令显式设置 `--aggregate-categories` 时传入同一值,组合图同步传入 `--series-types`;创建命令不传 `--data-labels` 时,建议器也按 `none` 估算,需要标签时两边都显式传入同一值。将返回的 `data.create_flags.width` / `height` 原样用于创建命令(包括 `--dry-run`),不要凭经验改小;`data.minimum_size` 仅表示兜底下限。若 `data.size_alone_is_insufficient=true`,先按 `data.layout_advice` 调整图表结构或标签策略,再用新配置重新计算尺寸。建议器只负责创建前预估,图表创建后仍须运行质量检查器。
84
+
85
+ **坐标轴语义与范围**:所有带坐标轴的图表都要在清单中记录每条轴对应的字段语义、类别轴 / 连续轴类型、单位以及主副轴归属,不能只核对轴标题。Y 轴显示范围默认交给图表引擎;用户未明确要求固定范围时,不传 `--y-axis-min` / `--y-axis-max`,需要固定范围时必须同时传上下界,重点只处理确有必要收紧的连续数值 X 轴。堆积图的峰值来自同一类别内系列累加,组合图还要按左右轴分别计算;不得直接把数据源单列的最小值 / 最大值当成 Y 轴边界。瀑布图的显示范围取决于逐项累计后的全部中间值、小计和总计,不得主动传 `--y-axis-min` / `--y-axis-max`;只有用户明确指定固定范围时才能例外,且必须覆盖所有累计节点。其它图表只有在用户明确要求或视觉验收证明自动范围不可读时,才按图表类型的实际绘制值计算并设置 Y 轴范围。多图对比时,先判断“范围 / 尺度一致”指绝对边界相同,还是跨度和刻度可比;对比同一指标时保持值轴口径一致,不同单位或量级的指标不强行共用边界。
66
86
 
67
87
  **横向类别行配方**:当日期/月份等类别横向排列在一行、目标数值在另一行时,把“类别行 + 数值行”一起放进 `--data-range` 并传 `--data-direction row`,例如 `--data-range "'Sheet1'!A1:M1,'Sheet1'!A3:M3" --data-direction row`。此时类别行属于数据映射,**不要**传给 `--header-range`。`--header-range` 仅表示与纯数据分离的“维度/系列名称”:column 方向必须是一行,row 方向必须是一列。row 方向却传入多列表头,通常说明把类别行误当成了分离表头。
68
88
 
69
- **整图配色优先走语义参数**:只要求统一主题或一组系列颜色时,在创建时传 `--color-palette` 或 `--colors`,已有图表用 `+chart-config-update` 更新;二者互斥。`--colors` 接受逗号分隔且至少包含 2 个十六进制色值的字符串;批量 operation 的 `colors` 同时接受字符串或字符串数组,也必须至少包含 2 个颜色。`--colors` 是整图色板:引擎按颜色数组的顺序**循环**给每个系列上色(柱子、折线、扇区等各类系列元素都算一个上色单位),颜色数少于系列数时从头循环复用。若要**明确指定每个系列的颜色**,必须传入与系列数量相同的颜色(否则会因循环导致部分系列共用同一颜色)。只有指定某个系列或某个数据点的颜色时才使用原始 snapshot。
89
+ **整图配色优先走语义参数**:统一主题或系列配色用 `--color-palette` / `--colors`,已有图用 `+chart-config-update`;优先继承原表主题,同一指标跨图保持同色,组合图用同色系柱形、高对比折线和中性辅助线。`--colors` 会循环复用,明确逐系列配色时颜色数须与系列数一致。颜色过多难以区分时优先 Top-N 或拆图;单系列/数据点配色才使用原始 snapshot。
70
90
 
71
91
  ## 需求→图表类型映射(创建前必查)
72
92
 
@@ -87,8 +107,10 @@
87
107
 
88
108
  **常见配置错误(必须注意)**:
89
109
  - **图表类型选择错误**:用户说"堆积柱形图 / 百分比堆积"时,用 `+chart-create-basic --stack normal|percent` 或 `+chart-config-update --stack normal|percent`;用户说"占比 / 比例"时,优先考虑饼图或百分比堆积图。注意 `column` 是纵向柱形图、`bar` 是横向条形图,"对比 / 各 XX" 类纵向柱默认用 `column`;面积图原生支持 `snapshot.plotArea.plot.type="area"`,别因速查表没列就判"不支持"。
90
- - **数据标签开关**:创建时用 `--data-labels`,已有图用 `+chart-config-update --data-labels`;明确关闭时传 `none`,不要为常用标签配置构造原始 `labels` 对象。高级配置中 `plotArea.plot.labels` 对象的存在性即开关;关闭标签时应省略整个 `labels` 字段,不能用全部字段置为 `false` 代替。用常量或重复值系列表示基准、目标、阈值或上下限时,默认关闭该系列标签;不支持单点标签时,不得用全系列重复标签代替,改用包含名称和值的系列名、图例或标题。
91
- - **数据标签位置**:只有用户明确要求且已有标签时才传 `--data-label-position`;它只调整已有标签的位置,不会单独开启标签。需要同时显示标签时一并传 `--data-labels`;未明确位置时省略,让图表按类型自动选择。标签位置只控制摆放方式,不能实现仅显示末点或关键点。
110
+ - **数据标签开关**:普通基础图先按拟开启 `--data-labels value` 运行尺寸建议器,再用建议宽高创建;不要仅凭数据点或系列数预先传 `none`。若使用建议尺寸后仍过密,依次改为关键点 / 末值 / 异常值的稀疏标签、Top-N 或拆图;用户明确要求隐藏全部标签时才传 `none`。已有图用 `+chart-config-update --data-labels`,不要为常用标签配置构造原始 `labels` 对象。高级配置中 `plotArea.plot.labels` 对象的存在性即开关:创建时关闭标签应省略该字段,更新时删除已有全局标签传 `labels: null`,不能用全部字段置为 `false` 代替。多个系列的数据标签展示要求不同时,禁止传全局 `--data-labels`,应在创建后读取完整 `plotArea.plot.series`,仅给需要标签的系列设置 `labels`,再用 `+chart-update --properties` 整段回写该数组。
111
+ - **辅助线与单点标签**:用户要求基准线、目标线、阈值线、平均线或上下限时,先在源数据旁新增一列重复目标值作为辅助线;如果只需要在线尾或某个关键位置显示一个标签,再新增一列稀疏标点数据,仅在目标行写入同一数值,其余单元格保持真正空白。数据准备完成后创建组合图:辅助值列用 `line`,稀疏标点列用 `scatter`,省略全局 `--data-labels`,并传 `--aggregate-categories=false` 关闭“汇总相同类别”;已有图用 `+chart-config-update --aggregate-categories=false`。随后读取完整系列数组,只给稀疏标点系列设置数值标签,辅助线系列必须省略 `labels`;原数据系列是否设置标签按用户要求决定。不得用重复值辅助线的全系列标签模拟单点标签,也不得用 0 代替空白标点,否则聚合会把空标点物化为每个类别的数据点,导致标签重复出现。
112
+ - **常量系列标签**:目标线、阈值线和上下限等重复常量系列默认不显示逐点标签;名称和值放在系列名、图例、标题或单个稀疏标记中。创建后若质量检查器提示“常量系列重复标签”,移除该系列标签或改成只有一个非空点的稀疏标记。
113
+ - **数据标签位置**:只有用户明确要求且已有标签时才传 `--data-label-position`;它只调整已有标签的位置,不会单独开启标签。需要同时显示标签时一并传 `--data-labels`;未明确位置时省略,让图表按类型自动选择。标签位置只控制摆放方式,不能实现仅显示末点或关键点。普通非堆叠柱形图显示数据标签位置一般传 `outside`。
92
114
  - **数据源范围与系列名来源要对齐**:
93
115
  - 默认让 `--data-range` 包含真正的表头行 / 列;表头上方的合并大标题必须跳过。
94
116
  - 数据和语义表头分离时,`--data-range` 只传纯数据,`--header-range` 传对应的一行(column)或一列(row)表头。范围可以是不连续多范围,也支持来自多个子表;不要因为跨子表就退回原始 snapshot。
@@ -96,6 +118,8 @@
96
118
  - **数据源必须是数值 / 日期型**:图表只渲染数值型单元格。用 `+cells-set` 构造数据源时,给数字 / 日期单元格设 `cell_styles.number_format`,不要留成纯文本,否则该系列渲染为空。
97
119
  - **数值 / 日期显示异常**:坐标轴沿用源单元格格式。日期显示成序列号、大数值显示成科学计数法时,修正源数据的 `cell_styles.number_format`,不要给图表轴构造未定义的 format 字段。
98
120
  - **轴口径错误**:用户要"占比 / 比例"时,用饼图或 `--stack percent`,并核对数据源与标签确实表达百分比,不要交付仍以原始计数为纵轴的图。
121
+ - **组合图系列被压扁**:创建前比较各系列的单位和典型值 / 峰值量级;单位不同、相差约一个数量级以上,或折线贴近 X 轴时,不得把所有系列都放左轴。用 `--series-y-axes` 将会被压扁的系列(常见为百分比、比率或小量级折线)放到右轴,并用左右轴标题明确各自单位;`--series-types` / `--series-y-axes` 必须与 `--dim2-indexes` 逐项对齐。
122
+ - **饼图标签截断**:饼图默认传 `--legend-position bottom`,并使用比普通单图更宽的画布;创建时同时传 `--width` / `--height`。宽度主要为左右两侧最长标签留白,不因类别数量线性增加;类别过多时改用 Top-N 或条形图,不能靠无限加宽或截断标签交付。
99
123
  - **对象语义验证**:基础单图先核对返回的完整 `snapshot`;批量创建、响应不完整、后续又更新或结果存疑时,再按受影响的 sheet 调一次 `+chart-list`。这里只核对数量、数据源、方向、系列和配置,不能代替交付前的布局检查。
100
124
 
101
125
  > **⚠️ 硬性规则:当用户通过列标题名称(而非列索引)指定横轴/纵轴系列时,必须先读取表格首行(表头)来确定列名与列索引的对应关系,再设置普通图表的 `--dim1-index` / `--dim2-indexes` 或气泡图的角色索引。**
@@ -138,8 +162,8 @@
138
162
  完成本次所有图表创建或更新后,再逐图核对以下项;全部通过才算完成:
139
163
 
140
164
  1. **数量**:图表数 = 用户明确要求的数量("每个 / 分别 / 逐一"等数量词已逐项展开为独立图,不用一张多系列图代替)。
141
- 2. **文案与展示项**:回读图表标题、副标题和坐标轴标题,确认语义准确且无乱码、占位符或空括号;图例、数据标签按用户要求展示或隐藏(未要求时不擅自增删),辅助系列不得用全点重复标签模拟单点或末点。带坐标轴的图表还要回读每条轴的字段语义、类型、单位、最小值 / 最大值、刻度以及主副轴归属;多图对比时再核对边界、跨度和口径是否符合用户的可比性要求。
142
- 3. **位置与布局**:图表创建、配置更新、数据更新或位置调整后,每个受影响子表运行一次 `python scripts/lark_chart_layout_check.py "<表格 URL 或 spreadsheet token>" --worksheet-id "<reference_id>"`,无需先用 `ls` 探测脚本。`data.passed=true` 且退出码为 `0` 才可交付;退出码 `2` 且 `data.passed=false` 表示检查成功发现问题,按返回位置用 `+chart-update --properties` 最小 patch 调整后重跑。退出码 `1`、网络超时或无有效 JSON 时只重试一次;仍失败则明确报告布局未完成验收,禁止用人工估算代替。
165
+ 2. **文案与展示项**:回读图表标题、副标题和坐标轴标题,确认语义准确且无乱码、占位符或空括号;图例按用户要求展示或隐藏,普通基础图的数据标签默认展示;密集时按“建议尺寸 → 稀疏标签 → Top-N / 拆图”处理。辅助系列不得用全点重复标签模拟单点或末点。带坐标轴的图表还要回读每条轴的字段语义、类型、单位、最小值 / 最大值、刻度以及主副轴归属;多图对比时再核对边界、跨度和口径是否符合用户的可比性要求。
166
+ 3. **图表质量**:图表创建、配置更新、数据更新或位置调整后,每个受影响子表运行一次 `python 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 时只重试一次,仍失败则明确报告质量检查未完成,禁止用人工估算代替。
143
167
 
144
168
  ## Shortcuts
145
169
 
@@ -173,15 +197,16 @@ _公共四件套 · 系统:`--dry-run`_
173
197
  | `--data-range` | string | required | 数据范围;未传 --header-range 时须包含表头,传入时只传纯数据;支持逗号分隔及跨子表多范围 |
174
198
  | `--header-range` | string | optional | 可选的分离表头范围;column 方向须为一行、row 方向须为一列,表头数须等于数据维度数 |
175
199
  | `--data-direction` | string | optional | 数据系列方向;column 表示首列为类别,row 表示首行为类别(可选值:`column` / `row`)(默认 `column`) |
200
+ | `--aggregate-categories` | bool | optional | 是否汇总相同类别;稀疏标点或需要保留逐行数据点时使用 --aggregate-categories=false,省略时沿用图表默认行为 |
176
201
  | `--x-axis-numbers-as` | string | optional | 横轴数字的解释方式;text 将数字视为等间距文本类别,values 按连续数值及真实间距绘制(可选值:`text` / `values`)(默认 `text`) |
177
202
  | `--x-axis-min` | float64 | optional | 连续数值 X 轴的显示范围下界;需同时使用 --x-axis-numbers-as values |
178
203
  | `--x-axis-max` | float64 | optional | 连续数值 X 轴的显示范围上界;需同时使用 --x-axis-numbers-as values |
179
- | `--y-axis-min` | float64 | optional | 左 Y 轴的显示范围下界;必须小于 --y-axis-max |
180
- | `--y-axis-max` | float64 | optional | 左 Y 轴的显示范围上界;必须大于 --y-axis-min |
181
- | `--dim1-index` | int | optional | 类别/X 轴维度在数据范围中的 1-based 索引;默认 1 |
204
+ | `--y-axis-min` | float64 | optional | 左 Y 轴的显示范围下界;默认省略,仅在用户明确要求固定范围时与 --y-axis-max 同时传;不得直接使用数据源单列最小值,且必须小于上界 |
205
+ | `--y-axis-max` | float64 | optional | 左 Y 轴的显示范围上界;默认省略,仅在用户明确要求固定范围时与 --y-axis-min 同时传;须按图表实际绘制值计算,且必须大于下界 |
206
+ | `--dim1-index` | int | optional | 唯一类别/X 轴维度在数据范围中的 1-based 索引;默认 1;不支持多个字段组成多级横轴 |
182
207
  | `--dim2-indexes` | string | optional | 值/Y 轴系列的 1-based 索引列表,逗号分隔;不能包含 dim1,最多 50 个。气泡图旧调用按 `x,y[,group][,size]` 顺序传 2–4 个,新调用优先使用角色索引;饼图和排列图只传 1 个 |
183
- | `--series-types` | string | optional | 仅组合图;按 --dim2-indexes 顺序指定系列类型,逗号分隔,可选 column、line、area,数量必须与数值系列一致 |
184
- | `--series-y-axes` | string | optional | 仅组合图;按 --dim2-indexes 顺序指定系列使用 left 或 right Y 轴,逗号分隔,数量必须与数值系列一致 |
208
+ | `--series-types` | string | optional | 仅组合图;按 --dim2-indexes 顺序指定系列类型,逗号分隔,可选 column、line、area、scatter,数量必须与数值系列一致 |
209
+ | `--series-y-axes` | string | optional | 仅组合图;先比较系列单位和量级,将会被压扁的系列放到 right 轴;按 --dim2-indexes 顺序传 left 或 right,数量必须与数值系列一致 |
185
210
  | `--key-index` | int | optional | 仅气泡图:标识/名称维度的 1-based 索引;与 dim1/dim2 索引互斥,默认 1 |
186
211
  | `--x-index` | int | optional | 仅气泡图:X 值维度的 1-based 索引;须与 --y-index 一起提供 |
187
212
  | `--y-index` | int | optional | 仅气泡图:Y 值维度的 1-based 索引;须与 --x-index 一起提供 |
@@ -189,21 +214,21 @@ _公共四件套 · 系统:`--dry-run`_
189
214
  | `--size-index` | int | optional | 仅气泡图:可选气泡大小维度的 1-based 索引 |
190
215
  | `--title` | string | optional | 图表标题 |
191
216
  | `--subtitle` | string | optional | 图表副标题 |
192
- | `--legend-position` | string | optional | 图例位置;hidden 隐藏图例(可选值:`top` / `bottom` / `left` / `right` / `hidden`) |
217
+ | `--legend-position` | string | optional | 图例位置;饼图默认 bottom,hidden 隐藏图例(可选值:`top` / `bottom` / `left` / `right` / `hidden`) |
193
218
  | `--x-axis-title` | string | optional | X 轴标题 |
194
219
  | `--y-axis-title` | string | optional | 左 Y 轴标题 |
195
220
  | `--secondary-y-axis-title` | string | optional | 右 Y 轴标题 |
196
221
  | `--x-axis-label-angle` | int | optional | X 轴标签旋转角度(可选值:`-90` / `-45` / `0` / `45` / `90`) |
197
222
  | `--y-axis-label-angle` | int | optional | 左 Y 轴标签旋转角度(可选值:`-90` / `-45` / `0` / `45` / `90`) |
198
- | `--data-labels` | string | optional | 数据标签内容;value、category、percentage 可按 value_category_percentage 顺序组成任意非空组合;series 显示系列名称,none 隐藏标签(可选值:`none` / `value` / `category` / `percentage` / `value_category` / `value_percentage` / `category_percentage` / `value_category_percentage` / `series`) |
199
- | `--data-label-position` | string | optional | 仅当用户明确指定时传入;只调整已有数据标签的位置,不会单独开启标签;省略时按图表类型自动优化数据标签位置(可选值:`auto` / `top` / `bottom` / `left` / `right` / `center` / `inside` / `outside`) |
223
+ | `--data-labels` | string | optional | 数据标签内容;普通基础图默认传 value,不要仅因数据点或系列较多而省略,仅用户明确要求隐藏全部标签时传 none;value、category、percentage 可按 value_category_percentage 顺序组成任意非空组合;series 显示系列名称(可选值:`none` / `value` / `category` / `percentage` / `value_category` / `value_percentage` / `category_percentage` / `value_category_percentage` / `series`) |
224
+ | `--data-label-position` | string | optional | 普通非堆叠柱形图显示标签时一般传 outside;其它场景仅当用户明确指定时传入;只调整已有数据标签的位置,不会单独开启标签(可选值:`auto` / `top` / `bottom` / `left` / `right` / `center` / `inside` / `outside`) |
200
225
  | `--stack` | string | optional | 堆叠模式(可选值:`none` / `normal` / `percent`) |
201
226
  | `--stacked` | bool | optional | 兼容别名;等价于 --stack normal(隐藏 flag:不在 `--help` 列出,但可正常传入) |
202
- | `--smooth` | bool | optional | 是否使用平滑曲线;支持 --smooth=false 和 --smooth false |
227
+ | `--smooth` | bool | optional | 是否使用平滑曲线;显式关闭使用 --smooth=false |
203
228
  | `--color-palette` | string | optional | 预设整图配色主题;与 --colors 互斥(可选值:`brandColorSeries@v2` / `rainbowColorSeries@v2` / `complementaryColorSeries@v2` / `converseColorSeries@v2` / `primaryColorSeries@v2` / `singleColorSeries-B-@v2` / `singleColorSeries-W-@v2` / `singleColorSeries-G-@v2` / `singleColorSeries-Y-@v2` / `singleColorSeries-O-@v2` / `singleColorSeries-R-@v2` / `singleColorSeries-D-@v2`) |
204
229
  | `--colors` | string_slice | optional | 自定义整图系列颜色,逗号分隔且至少 2 个十六进制色值;与 --color-palette 互斥 |
205
230
  | `--anchor-cell` | string | optional | 可选图表锚点单元格,如 F2;省略时放到数据范围右侧 |
206
- | `--width` | int | optional | 可选图表宽度;必须与 --height 同时传 |
231
+ | `--width` | int | optional | 可选图表宽度;必须与 --height 同时传;饼图及长类别标签场景应适量加宽以避免截断 |
207
232
  | `--height` | int | optional | 可选图表高度;必须与 --width 同时传 |
208
233
 
209
234
  ### `+chart-config-update`
@@ -223,14 +248,14 @@ _公共四件套 · 系统:`--dry-run`_
223
248
  | `--y-axis-label-angle` | int | optional | 左 Y 轴标签旋转角度(可选值:`-90` / `-45` / `0` / `45` / `90`) |
224
249
  | `--x-axis-min` | float64 | optional | 连续数值 X 轴的显示范围下界;必须小于 --x-axis-max |
225
250
  | `--x-axis-max` | float64 | optional | 连续数值 X 轴的显示范围上界;必须大于 --x-axis-min |
226
- | `--y-axis-min` | float64 | optional | 左 Y 轴的显示范围下界;必须小于 --y-axis-max |
227
- | `--y-axis-max` | float64 | optional | 左 Y 轴的显示范围上界;必须大于 --y-axis-min |
251
+ | `--y-axis-min` | float64 | optional | 左 Y 轴的显示范围下界;默认省略,仅在用户明确要求固定范围时与 --y-axis-max 同时传;不得直接使用数据源单列最小值,且必须小于上界 |
252
+ | `--y-axis-max` | float64 | optional | 左 Y 轴的显示范围上界;默认省略,仅在用户明确要求固定范围时与 --y-axis-min 同时传;须按图表实际绘制值计算,且必须大于下界 |
228
253
  | `--data-labels` | string | optional | 数据标签内容;value、category、percentage 可按 value_category_percentage 顺序组成任意非空组合;series 显示系列名称,none 隐藏标签(可选值:`none` / `value` / `category` / `percentage` / `value_category` / `value_percentage` / `category_percentage` / `value_category_percentage` / `series`) |
229
254
  | `--data-label-position` | string | optional | 仅当用户明确指定时传入;只调整已有数据标签的位置,不会单独开启标签;省略时按图表类型自动优化数据标签位置(可选值:`auto` / `top` / `bottom` / `left` / `right` / `center` / `inside` / `outside`) |
230
- | `--last-point-label` | bool | optional | 仅折线图、面积图、雷达图及组合图中的线性系列;true 开启每个系列最后一个数据点的数值标签,false 关闭这些单点标签 |
255
+ | `--aggregate-categories` | bool | optional | 是否汇总相同类别;稀疏标点或需要保留逐行数据点时使用 --aggregate-categories=false,省略时保留当前设置 |
231
256
  | `--stack` | string | optional | 堆叠模式(可选值:`none` / `normal` / `percent`) |
232
257
  | `--stacked` | bool | optional | 兼容别名;等价于 --stack normal(隐藏 flag:不在 `--help` 列出,但可正常传入) |
233
- | `--smooth` | bool | optional | 是否使用平滑曲线;支持 --smooth=false 和 --smooth false |
258
+ | `--smooth` | bool | optional | 是否使用平滑曲线;显式关闭使用 --smooth=false |
234
259
  | `--color-palette` | string | optional | 预设整图配色主题;与 --colors 互斥(可选值:`brandColorSeries@v2` / `rainbowColorSeries@v2` / `complementaryColorSeries@v2` / `converseColorSeries@v2` / `primaryColorSeries@v2` / `singleColorSeries-B-@v2` / `singleColorSeries-W-@v2` / `singleColorSeries-G-@v2` / `singleColorSeries-Y-@v2` / `singleColorSeries-O-@v2` / `singleColorSeries-R-@v2` / `singleColorSeries-D-@v2`) |
235
260
  | `--colors` | string_slice | optional | 自定义整图系列颜色,逗号分隔且至少 2 个十六进制色值;与 --color-palette 互斥 |
236
261
 
@@ -244,7 +269,7 @@ _公共四件套 · 系统:`--dry-run`_
244
269
  | `--data-range` | string | required | 新数据范围;未传 --header-range 时须包含表头,传入或原图已使用分离表头时只传纯数据;支持逗号分隔及跨子表多范围 |
245
270
  | `--header-range` | string | optional | 可选的分离表头范围;提供后自动使用 detached 表头映射,省略时保留原图已有的 detached 映射 |
246
271
  | `--data-direction` | string | optional | 数据系列方向;省略时沿用现有图表方向(可选值:`column` / `row`) |
247
- | `--dim1-index` | int | optional | 类别/X 轴维度在数据范围中的 1-based 索引;省略时使用第 1 个维度 |
272
+ | `--dim1-index` | int | optional | 唯一类别/X 轴维度在数据范围中的 1-based 索引;省略时使用第 1 个维度;不支持多个字段组成多级横轴 |
248
273
  | `--dim2-indexes` | string | optional | 值/Y 轴系列在数据范围中的 1-based 索引,逗号分隔;省略时使用除 dim1 外的全部维度 |
249
274
  | `--key-index` | int | optional | 仅气泡图:标识/名称维度的 1-based 索引;与 dim1/dim2 索引互斥,默认 1 |
250
275
  | `--x-index` | int | optional | 仅气泡图:X 值维度的 1-based 索引;须与 --y-index 一起提供 |
@@ -290,7 +315,6 @@ _创建/更新的图表属性_
290
315
  - `position` (object?) — 必填 { row: number, col: string }
291
316
  - `offset` (object?) — 可选 { row_offset?: number, col_offset?: number }
292
317
  - `size` (object?) — 必填 { width: number, height: number }
293
- - `last_point_label` (boolean?) — update 使用
294
318
  - `snapshot` (oneOf?) — 图表快照配置
295
319
 
296
320
  ## Examples
@@ -303,7 +327,7 @@ _创建/更新的图表属性_
303
327
 
304
328
  ### `+chart-create-basic`
305
329
 
306
- 默认使用第 1 个维度作为类别/X 轴,其余维度作为数值系列;普通图表可用 1-based 的 `--dim1-index` 和逗号分隔的 `--dim2-indexes` 精确选择。组合图默认首个数值系列为左轴柱、其余为右轴折线;需要其它组合时,用 `--series-types` 和 `--series-y-axes` 按 `--dim2-indexes` 的顺序逐项指定系列类型与左右轴,两组参数的数量都必须与最终数值系列数一致。横轴数字默认按等间距文本类别处理;只有数字之间的真实间距需要影响图形位置时,才传 `--x-axis-numbers-as values` 使用连续数轴。气泡图改用 `--key-index`、`--x-index`、`--y-index` 和可选的 `--group-index` / `--size-index`,其中 x/y 必须同时提供,key 默认 1;角色索引不能与 dim1/dim2 索引混用。旧气泡图的 dim1/dim2 位置调用仍兼容。饼图和排列图只允许一个数值系列;组合图至少需要两个数值系列;所有图表最多选择 50 个数值系列。默认让 `--data-range` 包含真实表头;只有“维度/系列名称”与纯数据分离时,才让 `--data-range` 只传纯数据,并用 `--header-range` 传对应的一行(column)或一列(row)表头。类别维度与数值维度不连续时,范围参数可传逗号分隔的多范围,也支持来自多个子表;沿数据点轴对齐的跨子表范围会保留独立引用,同一子表内错行、错列或重叠时合并为最小包围矩形,跨子表范围无法对齐时会报错。单独调用成功后返回完整 `snapshot`,可直接检查创建结果并继续修改。参数名使用 `--anchor-cell` 和 `--data-labels`。兼容调用中,`--type` / `--range` 会分别按 `--chart-type` / `--data-range` 处理,`--x-axis` / `--y-axis` 会按轴标题处理;新调用仍优先使用规范参数名。
330
+ 默认使用第 1 个维度作为类别/X 轴,其余维度作为数值系列;普通图表可用 1-based 的 `--dim1-index` 和逗号分隔的 `--dim2-indexes` 精确选择。组合图默认首个数值系列为左轴柱、其余为右轴折线;创建前仍要比较各系列单位和量级,避免折线或小量级系列因共用左轴而贴近 X 轴。需要其它组合时,用 `--series-types` 和 `--series-y-axes` 按 `--dim2-indexes` 的顺序逐项指定系列类型与左右轴;系列类型可选 `column`、`line`、`area`、`scatter`,两组参数的数量都必须与最终数值系列数一致。横轴数字默认按等间距文本类别处理;只有数字之间的真实间距需要影响图形位置时,才传 `--x-axis-numbers-as values` 使用连续数轴。气泡图改用 `--key-index`、`--x-index`、`--y-index` 和可选的 `--group-index` / `--size-index`,其中 x/y 必须同时提供,key 默认 1;角色索引不能与 dim1/dim2 索引混用。旧气泡图的 dim1/dim2 位置调用仍兼容。饼图和排列图只允许一个数值系列;组合图至少需要两个数值系列;所有图表最多选择 50 个数值系列。饼图默认将图例放在底部,并根据类别标签长度适量增加 `--width`(同时传 `--height`)。默认让 `--data-range` 包含真实表头;只有“维度/系列名称”与纯数据分离时,才让 `--data-range` 只传纯数据,并用 `--header-range` 传对应的一行(column)或一列(row)表头。类别维度与数值维度不连续时,范围参数可传逗号分隔的多范围,也支持来自多个子表;沿数据点轴对齐的跨子表范围会保留独立引用,同一子表内错行、错列或重叠时合并为最小包围矩形,跨子表范围无法对齐时会报错。单独调用成功后返回完整 `snapshot`,可直接检查创建结果并继续修改。参数名使用 `--anchor-cell` 和 `--data-labels`。兼容调用中,`--type` / `--range` 会分别按 `--chart-type` / `--data-range` 处理,`--x-axis` / `--y-axis` 会按轴标题处理;新调用仍优先使用规范参数名。
307
331
 
308
332
  **连续数值 X 轴的可读性**:`--x-axis-numbers-as values` 会保留数字的真实间距,但未指定范围时可能自动包含 0。如果数据集中在远离 0 的窄区间,数据点会挤在图表一侧;此时应保留 `values`,创建时用 `--x-axis-min` / `--x-axis-max` 收紧范围,已有图表用 `+chart-config-update` 修正,不要改成 `text` 掩盖问题。两个边界可单独设置;同时设置时 min 必须小于 max。
309
333
 
@@ -320,7 +344,19 @@ lark-cli sheets +chart-create-basic --url "..." --sheet-name "Sheet1" \
320
344
  --dim1-index 1 --dim2-indexes 2,3,4 \
321
345
  --series-types column,column,line --series-y-axes left,left,right \
322
346
  --title "价格与效率" --y-axis-title "价格" --secondary-y-axis-title "效率" \
323
- --anchor-cell F2 --width 700 --height 400
347
+ --anchor-cell F2 --width 720 --height 420
348
+
349
+ # 辅助线只显示一个标签:C 列为重复目标值,D 列仅目标位置有值、其余单元格为空
350
+ lark-cli sheets +chart-create-basic --url "..." --sheet-name "Sheet1" \
351
+ --chart-type combo --data-range "'Sheet1'!A1:D7" \
352
+ --dim1-index 1 --dim2-indexes 2,3,4 \
353
+ --series-types line,line,scatter --series-y-axes left,left,left \
354
+ --aggregate-categories=false \
355
+ --title "趋势与目标线" --anchor-cell F2 --width 720 --height 420
356
+
357
+ # 先从创建结果或 +chart-list 取得完整 series 数组,再整段回写;辅助线系列不设置 labels
358
+ lark-cli sheets +chart-update --url "..." --sheet-id "$SID" --chart-id "chrXXX" \
359
+ --properties '{"snapshot":{"plotArea":{"plot":{"series":[{"index":2,"comboType":"line","labels":{"value":true}},{"index":3,"comboType":"line"},{"index":4,"comboType":"scatter","labels":{"value":true}}]}}}}'
324
360
 
325
361
  # 气泡图:x、y 必填,group、size 可选
326
362
  lark-cli sheets +chart-create-basic --url "..." --sheet-name "Sheet1" \
@@ -399,17 +435,15 @@ lark-cli sheets +chart-data-update --url "..." --sheet-id "$SID" --chart-id "chr
399
435
 
400
436
  ### `+chart-config-update`
401
437
 
402
- 只传需要改的字段,成功后返回更新后的 `viewModel`。`--data-labels` 支持 `value`、`category`、`percentage` 的任意非空组合,组合值按 `value_category_percentage` 顺序拼接;另可用 `series` 显示系列名称、用 `none` 删除数据标签。折线图、面积图、雷达图及组合图中的线性系列可用 `--last-point-label=true` 只开启每个系列最后一个数据点的数值标签,传 `false` 关闭这些单点标签。`--legend-position hidden` 隐藏图例;`--smooth=false` 和 `--smooth false` 都可显式关闭平滑曲线。为减少参数重试,`--stacked` 自动按 `--stack normal` 处理,`percentage,value` 或 `value,percentage` 自动按 `value_percentage` 处理,`--x-axis` / `--y-axis` 自动按 `--x-axis-title` / `--y-axis-title` 处理;新调用仍优先使用规范参数。
438
+ 只传需要改的字段,成功后返回更新后的 `viewModel`。`--data-labels` 支持 `value`、`category`、`percentage` 的任意非空组合,组合值按 `value_category_percentage` 顺序拼接;另可用 `series` 显示系列名称、用 `none` 删除数据标签。多个系列需要不同标签策略时不要使用这个全局参数,按上文的辅助列与高级系列配置流程处理。`--legend-position hidden` 隐藏图例;显式关闭平滑曲线时使用 `--smooth=false`。为减少参数重试,`--stacked` 自动按 `--stack normal` 处理,`percentage,value` 或 `value,percentage` 自动按 `value_percentage` 处理,`--x-axis` / `--y-axis` 自动按 `--x-axis-title` / `--y-axis-title` 处理;新调用仍优先使用规范参数。
403
439
 
404
440
  ```bash
405
441
  lark-cli sheets +chart-config-update --url "..." --sheet-id "$SID" --chart-id "chrXXX" \
406
442
  --title "新标题" --x-axis-label-angle -45 --legend-position right
407
443
 
408
444
  lark-cli sheets +chart-config-update --url "..." --sheet-id "$SID" --chart-id "chrXXX" \
409
- --data-labels value_percentage --stack percent
445
+ --data-labels value_percentage --stack percent --aggregate-categories=false
410
446
 
411
- lark-cli sheets +chart-config-update --url "..." --sheet-id "$SID" --chart-id "chrXXX" \
412
- --last-point-label=true
413
447
  ```
414
448
 
415
449
  ### `+chart-create`
@@ -418,7 +452,7 @@ lark-cli sheets +chart-config-update --url "..." --sheet-id "$SID" --chart-id "c
418
452
 
419
453
  ### `+chart-update`
420
454
 
421
- 标题、轴、图例、标签、堆叠、平滑、配色优先使用 `+chart-config-update`,数据范围和方向使用 `+chart-data-update`。只有高级字段才使用 `+chart-update`;不要为常见修改构造 raw properties。
455
+ 标题、轴、图例、标签、堆叠、平滑、配色和相同类别汇总优先使用 `+chart-config-update`,数据范围和方向使用 `+chart-data-update`。只有高级字段才使用 `+chart-update`;不要为常见修改构造 raw properties。
422
456
 
423
457
  `+chart-update` 支持真正的局部更新:只传实际变化的字段,未传字段保持不变,不要复制并回写完整 snapshot。
424
458
 
@@ -431,7 +465,7 @@ lark-cli sheets +chart-config-update --url "..." --sheet-id "$SID" --chart-id "c
431
465
  ```bash
432
466
  # 只调整尺寸;无需携带 snapshot
433
467
  lark-cli sheets +chart-update --url "..." --sheet-id "$SID" --chart-id "chrXXX" \
434
- --properties '{"size":{"width":640,"height":360}}'
468
+ --properties '{"size":{"width":640,"height":400}}'
435
469
  ```
436
470
 
437
471
  #### 高级 `properties` 边界