@amaster.ai/pi-lark 0.1.10 → 0.1.12
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 +2 -2
- package/skills/lark-approval/SKILL.md +2 -2
- package/skills/lark-approval/references/lark-approval-instances-initiated.md +5 -0
- package/skills/lark-approval/references/lark-approval-tasks-add-sign.md +68 -20
- package/skills/lark-approval/references/lark-approval-tasks-query.md +5 -0
- package/skills/lark-base/SKILL.md +108 -5
- package/skills/lark-base/references/lark-base-data-query.md +2 -6
- package/skills/lark-base/references/lark-base-field-extension.md +170 -0
- package/skills/lark-base/references/lark-base-field-lookup.md +1 -1
- package/skills/lark-base/references/lark-base-filter-condition.md +32 -5
- package/skills/lark-base/references/lark-base-form-detail.md +1 -1
- package/skills/lark-base/references/lark-base-form-submit.md +2 -2
- package/skills/lark-base/references/lark-base-record-history-list.md +1 -1
- package/skills/lark-base/references/lark-base-record-query-and-analysis-sop.md +95 -205
- package/skills/lark-base/references/lark-base-template-center.md +5 -1
- package/skills/lark-calendar/SKILL.md +6 -0
- package/skills/lark-calendar/references/lark-calendar-join-event.md +43 -0
- package/skills/lark-drive/references/lark-drive-member-remove.md +2 -1
- package/skills/lark-im/SKILL.md +15 -1
- package/skills/lark-im/references/lark-im-messages-edit.md +89 -0
- package/skills/lark-im/references/lark-im-messages-mget.md +8 -0
- package/skills/lark-im/references/lark-im-messages-reply.md +2 -0
- package/skills/lark-im/references/lark-im-messages-send.md +6 -2
- package/skills/lark-markdown/SKILL.md +1 -1
- package/skills/lark-meeting/SKILL.md +6 -2
- package/skills/lark-meeting/references/lark-minutes-summary.md +1 -0
- package/skills/lark-meeting/references/lark-minutes-todo.md +39 -1
- package/skills/lark-meeting/references/lark-minutes-upload.md +6 -0
- package/skills/lark-meeting/references/lark-vc-agent-meeting-end.md +26 -0
- package/skills/lark-meeting/references/lark-vc-agent-meeting-invite.md +32 -0
- package/skills/lark-meeting/references/lark-vc-agent-meeting-join.md +8 -2
- package/skills/lark-meeting/references/lark-vc-meeting-countdown.md +103 -0
- package/skills/lark-meeting/references/lark-vc-meeting-events.md +1 -0
- package/skills/lark-meeting/references/lark-vc-meeting-screenshot.md +34 -0
- package/skills/lark-meeting/scenes/create-and-edit-minutes.md +25 -3
- package/skills/lark-meeting/scenes/live-meeting-attend.md +63 -6
- package/skills/lark-meeting/scenes/live-meeting-interact.md +32 -3
- package/skills/lark-sheets/SKILL.md +76 -60
- package/skills/lark-sheets/references/lark-sheets-batch-update.md +83 -14
- package/skills/lark-sheets/references/lark-sheets-chart.md +296 -159
- package/skills/lark-sheets/references/lark-sheets-conditional-format.md +46 -9
- package/skills/lark-sheets/references/lark-sheets-filter.md +1 -1
- package/skills/lark-sheets/references/lark-sheets-formula-translation.md +78 -65
- package/skills/lark-sheets/references/lark-sheets-formula-verify.md +21 -17
- package/skills/lark-sheets/references/lark-sheets-pivot-table.md +2 -1
- package/skills/lark-sheets/references/lark-sheets-range-operations.md +1 -1
- package/skills/lark-sheets/references/lark-sheets-read-data.md +8 -5
- package/skills/lark-sheets/references/lark-sheets-search-replace.md +4 -4
- package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +2 -2
- package/skills/lark-sheets/references/lark-sheets-sparkline.md +1 -0
- package/skills/lark-sheets/references/lark-sheets-styles-put.md +3 -3
- package/skills/lark-sheets/references/lark-sheets-visual-standards.md +6 -4
- package/skills/lark-sheets/references/lark-sheets-workbook.md +3 -1
- package/skills/lark-sheets/references/lark-sheets-write-cells.md +50 -48
- package/skills/lark-sheets/scripts/lark_chart_layout_check.py +472 -0
- package/skills/lark-slides/references/cli/lark-slides-add-slide.md +6 -6
- package/skills/lark-slides/references/cli/lark-slides-delete-slide.md +3 -3
- package/skills/lark-slides/references/cli/lark-slides-replace-slide.md +11 -11
- package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md +1 -1
- package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md +2 -2
- package/skills/lark-slides/references/workflow/slides-editing.md +11 -11
- package/skills/lark-slides/references/xml/slides_xml_schema_definition.xml +2 -0
- package/skills/lark-base/references/lark-base-cell-value.md +0 -165
- package/skills/lark-base/references/lark-base-data-analysis-pandas.md +0 -93
- package/skills/lark-base/references/lark-base-data-analysis-python-stdlib.md +0 -120
- package/skills/lark-base/references/lark-base-record-batch-create.md +0 -63
- package/skills/lark-base/references/lark-base-record-batch-update.md +0 -57
- package/skills/lark-base/references/lark-base-record-query-and-analysis-cloud-sop.md +0 -145
|
@@ -2,18 +2,71 @@
|
|
|
2
2
|
|
|
3
3
|
## 真对象硬约束
|
|
4
4
|
|
|
5
|
-
当用户要求"画个图 / 数据可视化 / 趋势图 / 对比图 / 占比图"
|
|
5
|
+
当用户要求"画个图 / 数据可视化 / 趋势图 / 对比图 / 占比图"时,**必须**通过图表创建命令创建真实的图表对象。**禁止**用本地脚本调 matplotlib / seaborn 生成图片再插入到表格代替——静态图片无法随源数据更新,且失去交互能力。判断标准:最终对象必须能被 `+chart-list` 返回;基础单图可先用创建调用返回的完整 `snapshot` 验证,批量创建必须按受影响的 sheet 回读列表。
|
|
6
6
|
|
|
7
7
|
## 使用场景
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
读写图表对象。基础创建和常用更新优先用语义 shortcut,只在高级配置时使用原始 snapshot:
|
|
10
10
|
|
|
11
11
|
| 操作需求 | 使用工具 | 说明 |
|
|
12
12
|
|---------|---------|------|
|
|
13
13
|
| 查看已有图表 | `+chart-list` | 获取图表的类型、数据源和样式配置 |
|
|
14
|
-
|
|
|
14
|
+
| 按类型和范围创建基础图 | `+chart-create-basic` | 支持 column/bar/line/area/pie/scatter/combo/radar/bubble/waterfall/pareto、行/列方向与整图配色;无需构造 snapshot |
|
|
15
|
+
| 更新标题、轴、图例、标签、堆叠、平滑或整图配色 | `+chart-config-update` | CLI 读取当前快照并只回写配置 patch |
|
|
16
|
+
| 修正已有图表的数据范围或方向 | `+chart-data-update` | CLI 读取当前快照并只回写 data patch,保留其它配置 |
|
|
17
|
+
| 批量创建多个独立图表 | `+batch-chart-create` | 保留成功图表,并逐项返回失败原因;只重试失败项 |
|
|
18
|
+
| 批量更新多个独立图表 | `+batch-chart-update` | 逐图读取当前快照并生成 partial properties |
|
|
19
|
+
| 高级创建/更新、删除图表 | `+chart-{create\|update\|delete}` | 按系列/数据点精细设置等高级需求才使用原始 properties;更新只提交必要的局部 properties |
|
|
15
20
|
|
|
16
|
-
|
|
21
|
+
## 统一决策顺序
|
|
22
|
+
|
|
23
|
+
明确目标后,始终按以下顺序选入口,不从原始 snapshot 起步:
|
|
24
|
+
|
|
25
|
+
1. 普通单图创建 → `+chart-create-basic`;
|
|
26
|
+
2. 多张独立图创建 → `+batch-chart-create`;
|
|
27
|
+
3. 已有图的数据源 / 方向 / 系列变化 → `+chart-data-update`;
|
|
28
|
+
4. 已有图的标题 / 轴 / 图例 / 标签 / 堆叠 / 平滑 / 整图配色变化 → `+chart-config-update`;
|
|
29
|
+
5. 只有上述语义 shortcut 无法表达的单系列、单数据点或高级字段,才使用 `+chart-create` / `+chart-update` 的原始 `properties`。
|
|
30
|
+
|
|
31
|
+
进入高级入口前先写明“哪个用户要求无法由哪个语义参数表达”。答不出来就退回语义 shortcut。不要因为语义调用失败一次就改走原始 snapshot;先根据明确错误修正参数。
|
|
32
|
+
|
|
33
|
+
普通创建、数据源修正和常用配置更新不要构造原始 snapshot。
|
|
34
|
+
|
|
35
|
+
典型工作流:先确认表头和精确数据范围,用 `+chart-create-basic` 一次创建并尽量在同次调用中带上已知标题/轴/标签内容要求;标签位置只有用户明确指定时才传。创建后用返回的完整 `snapshot` 检查范围、方向与系列,再按需用 `+chart-list` 验证。已有图表的数据范围或方向错误时用 `+chart-data-update`,常用配置修正用 `+chart-config-update`。只有用户要求单个系列、数据点或高级引擎字段时,才读取现有 snapshot 并调 `+chart-update --properties`。不要为了常用配置先输出整份 schema,也不要删除重建已经创建成功的图表。
|
|
36
|
+
|
|
37
|
+
**多图表工作流**:先完成所有辅助数据和表头,列出每张目标图的类型、精确数据范围、标题和落点;确认清单后,用一次 `+batch-chart-create` 批量创建。它的每个 operation 直接填写 `+chart-create-basic` flags,CLI 内部固定按 `+chart-create-basic` 执行,不要再套 `shortcut` / `input`。图表之间独立时允许部分成功:按返回的逐项结果定位失败图表,只重试失败项。批量 create 的逐项结果不返回完整 snapshot;批次后每个受影响的 sheet 各调用一次 `+chart-list`。已经成功创建的图表有数据源或配置差异时,用 `+batch-chart-update` 批量执行对应的语义更新,不要删除重建。
|
|
38
|
+
|
|
39
|
+
**图表错误处理工作流(必须按顺序)**:
|
|
40
|
+
1. **基础单图走快路径**:sheet、范围、类型和落点都明确时,直接调用 `+chart-create-basic`,并检查返回的完整 `snapshot`;不要为了预览而固定多做一次 `--dry-run`。
|
|
41
|
+
2. **以下情况创建前必须 `--dry-run`**:批量创建、多范围或跨子表数据源、包含“每个 / 分别 / 逐一”等数量词、落点不确定,或确实需要原始高级配置。检查数量、sheet、范围、类型和落点;输出中的 `tool_name` / `operation` / `basic_chart` / `properties` 是 CLI 翻译后的内部 MCP body,**只能读,不能复制回 operations**。
|
|
42
|
+
3. 批量执行后同时检查 `succeeded`、`failed` 和逐项 `results[index]`;命令退出成功或顶层 `ok=true` 不代表每张图都成功。单图则检查返回的 `snapshot`。
|
|
43
|
+
4. 有失败时保留成功图表,按原始 `index` 重新生成只包含失败项的新 operations。禁止复用原始整批 payload,否则会重复创建已经成功的图表。
|
|
44
|
+
5. 批量成功后每个受影响 sheet 只调用一次 `+chart-list`,核对总数、标题、范围、方向与系列;基础单图的返回 `snapshot` 完整且符合预期时不再重复 list,只有响应不完整、后续又更新或结果存疑时再 list。
|
|
45
|
+
6. 快照不符合预期时原地修复:数据源、方向、维度/系列、分离表头用 `+chart-data-update`;标题、轴、图例、标签、堆叠、平滑、配色用 `+chart-config-update`;只有高级字段才用 `+chart-update --properties` 的最小局部 patch。不要删除重建。
|
|
46
|
+
|
|
47
|
+
**失败归因与恢复**:
|
|
48
|
+
- 参数校验失败:只根据 stderr 指出的未知 flag、缺失字段或 operations 结构修正一次;不要把 `--dry-run` 展示的内部 body 复制回命令。
|
|
49
|
+
- 批量部分失败:保留成功项,只重试 `failed` 对应的原始 index;重试前断言新 operations 数量等于失败数。
|
|
50
|
+
- 执行成功但结果不符:以返回 snapshot / `+chart-list` 为准,在原图上走语义更新;不要因标题、范围或配色不对就删除重建。
|
|
51
|
+
- 返回空输出或无法确认:检查退出码和 stderr,并做一次对象回读;仍无法确认时如实报告,禁止声称已完成。
|
|
52
|
+
- 同一种修正再次失败:停止改猜 schema、MCP body 或完整 snapshot。若语义 shortcut 能表达就回到语义入口;否则保留原对象并报告明确错误。
|
|
53
|
+
|
|
54
|
+
**图片图表 → 真图表迁移(“把截图 / 贴图换成真图表”类任务)**:
|
|
55
|
+
1. 先用 `+float-image-list` 读取待替换浮动图片的 ID、位置、尺寸和数量,并确认每张图片与目标真图表的对应关系;不得把 logo、说明图或无法确认对应关系的图片当成待替换图表。
|
|
56
|
+
2. 用户要求“配色 / 样式与原图一致”时,必须先使用可用的图像理解能力视觉检查原图,确认图表类型、标题、系列配色、图例、标签、堆叠方式、位置和尺寸;`+float-image-list` 只用于获取对象信息,不能代替视觉检查。对无法确认的样式不得凭空猜测。
|
|
57
|
+
3. 优先用 `+chart-create-basic` / `+batch-chart-create` 的语义参数复刻已确认的类型、标题、配色、图例、标签和堆叠方式,并尽量按原图位置与尺寸落图。普通整图配色使用 `--colors` / `--color-palette`;只有原图明确包含语义 shortcut 无法表达的单系列或单数据点样式时,才使用原始 `properties`。
|
|
58
|
+
4. 建好真图表后,必须先用创建返回的完整 `snapshot` 或 `+chart-list` 确认图表数量、标题、数据源、系列和位置正确,再按 [Lark Sheet Float Image](./lark-sheets-float-image.md) 的高风险删除流程用 `+float-image-delete` 删除与其一一对应的原浮动图片。
|
|
59
|
+
5. 删除后再调用一次 `+float-image-list`,确认被替换图片已消失,其它图片未受影响。
|
|
60
|
+
|
|
61
|
+
**数量词必须展开**:用户说“每个 / 每天 / 分别 / 逐一 / 各一张图”时,先从数据中数出实体数 `N`,把这 `N` 张图逐项写进清单,再加上其它汇总图得到目标总数 `M`;一个包含全部实体的多系列图不能替代这 `N` 张独立图。批次前断言 operations 中恰有 `M` 个图表创建,批次后断言图表总数、逐图标题与实体集合一致。
|
|
62
|
+
|
|
63
|
+
**范围与系列前置校验(创建前必做)**:清单中同时记录每张图的表头范围、纳入维度、明确排除维度、数据方向和预期系列数。当前每张图**最多 50 个数值系列**;按列组织时通常为“所选数值列数”,按行组织时通常为“所选数值行数”。创建时就用 `+chart-create-basic --dim1-index ... --dim2-indexes ...` 显式选择类别与不超过 50 个数值系列;如果业务要求展示超过 50 个系列,应先建立紧凑汇总表或 Top-N,而不是反复删除重建。创建前根据实际表头确认索引和边界,不凭字母猜范围;创建后范围、方向或系列数不符时,使用 `+chart-data-update` 修正,CLI 会读取当前快照、重建 `refs` / `dim1` / `dim2.series` 并只提交 data patch,不要删除后重建。
|
|
64
|
+
|
|
65
|
+
**坐标轴语义与范围**:所有带坐标轴的图表都要在清单中记录每条轴对应的字段语义、类别轴 / 连续轴类型、单位、边界、刻度间隔以及主副轴归属,不能只核对轴标题。多图对比时,先判断“范围 / 尺度一致”指绝对边界相同,还是跨度和刻度可比;用户未明确要求所有图共用相同最小值和最大值时,不要默认使用各数据子集的并集边界。按连续区间分图时,各图使用自己的区间边界并保持跨度和刻度可比;对比同一指标时保持值轴口径一致,不同单位或量级的指标不强行共用边界。
|
|
66
|
+
|
|
67
|
+
**横向类别行配方**:当日期/月份等类别横向排列在一行、目标数值在另一行时,把“类别行 + 数值行”一起放进 `--data-range` 并传 `--data-direction row`,例如 `--data-range "'Sheet1'!A1:M1,'Sheet1'!A3:M3" --data-direction row`。此时类别行属于数据映射,**不要**传给 `--header-range`。`--header-range` 仅表示与纯数据分离的“维度/系列名称”:column 方向必须是一行,row 方向必须是一列。row 方向却传入多列表头,通常说明把类别行误当成了分离表头。
|
|
68
|
+
|
|
69
|
+
**整图配色优先走语义参数**:只要求统一主题或一组系列颜色时,在创建时传 `--color-palette` 或 `--colors`,已有图表用 `+chart-config-update` 更新;二者互斥。`--colors` 接受逗号分隔且至少包含 2 个十六进制色值的字符串;批量 operation 的 `colors` 同时接受字符串或字符串数组,也必须至少包含 2 个颜色。`--colors` 是整图色板:引擎按颜色数组的顺序**循环**给每个系列上色(柱子、折线、扇区等各类系列元素都算一个上色单位),颜色数少于系列数时从头循环复用。若要**明确指定每个系列的颜色**,必须传入与系列数量相同的颜色(否则会因循环导致部分系列共用同一颜色)。只有指定某个系列或某个数据点的颜色时才使用原始 snapshot。
|
|
17
70
|
|
|
18
71
|
## 需求→图表类型映射(创建前必查)
|
|
19
72
|
|
|
@@ -22,52 +75,31 @@
|
|
|
22
75
|
| "占比"、"比例"、"各XX占多少" | 饼图(pie) | 单维度占比首选 |
|
|
23
76
|
| "对比"、"各XX的YY" | 柱形图(column,纵向) | 多类别数值对比;横向条形用 `bar` |
|
|
24
77
|
| "趋势"、"变化"、"走势" | 折线图(line) | 时间序列首选 |
|
|
78
|
+
| "趋势与量级"、"累计变化"、"区间规模" | 面积图(area) | 用面积强调趋势与数值量级 |
|
|
25
79
|
| "堆积"、"组成构成" | 堆积柱形图(column + stack) | 多系列累加 |
|
|
80
|
+
| "簇状堆积柱形图" | 堆积柱形图(column + stack) | 当前不支持原生簇状堆积;将簇状维度拆分到横轴类别,用堆积柱状图实现类似效果 |
|
|
26
81
|
| "分布"、"相关性" | 散点图(scatter) | 两变量关系 |
|
|
82
|
+
| "气泡大小"、"三变量关系"、"分组散点" | 气泡图(bubble) | x/y 决定位置,size 决定气泡大小,group 决定分组 |
|
|
83
|
+
| "逐项增减"、"变动贡献"、"从期初到期末" | 瀑布图(waterfall) | 展示正负变化及总计/小计;通常选一个分类列和一个增减值列 |
|
|
84
|
+
| "主要原因"、"累计占比"、"80/20" | 排列图(pareto) | 降序柱形 + 累计百分比曲线;只允许一个数值系列 |
|
|
27
85
|
|
|
28
86
|
**多图表需求**:当用户同时提到多种分析(如"统计占比 + 对比数量"),必须创建多个图表,每个对应一种类型,不要只做一个。
|
|
29
87
|
|
|
30
|
-
**`--properties` 结构锚点(构造前必读)**:`--properties` 顶层只有 `position` / `offset` / `size` / `snapshot` 四个字段,**没有**顶层 `data`,也没有再嵌一层 `properties`。图表数据配置全部挂在 `snapshot.data` 下——下文及示例里出现的 `refs` / `headerMode` / `dim1` / `dim2` / `nameRef` 一律指 `snapshot.data.refs` / `snapshot.data.headerMode` / `snapshot.data.dim1` / `snapshot.data.dim2`(及其下的 `serie.nameRef` / `series[].nameRef`);样式 / 堆叠 / 数据标签等在 `snapshot.plotArea` 下。**构造起点优先用 `lark-cli sheets +chart-create --print-example <column|bar|line|area|pie|scatter|radar|combo>` 拿最小可用模板改参**(本地即时返回);查深层字段用点分路径切片 `--print-schema --flag-name properties.snapshot.plotArea.axes`,别整篇 dump 翻页。完整结构以 `--print-schema --flag-name properties` 为准。
|
|
31
|
-
|
|
32
88
|
**常见配置错误(必须注意)**:
|
|
33
|
-
- **图表类型选择错误**:用户说"
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
- 用户明确说"不要数据标签 / 关掉标签"时:**整个 `labels` 字段省略**。不要用 `labels: { value: false, category: false, series: false }` 这种"全部置 false"的写法关闭——只要传了 `labels`,系统就会显示数据标签(且默认兜底显示 value)。
|
|
89
|
+
- **图表类型选择错误**:用户说"堆积柱形图 / 百分比堆积"时,用 `+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`;未明确位置时省略,让图表按类型自动选择。标签位置只控制摆放方式,不能实现仅显示末点或关键点。
|
|
37
92
|
- **数据源范围与系列名来源要对齐**:
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
>
|
|
47
|
-
|
|
48
|
-
> **⚠️ 硬性规则:数据与表头分离场景必须使用 detached 模式。** 当 `refs` 仅覆盖数据的一个子集,而真正的语义表头行/列位于该子集之外时,**必须** `snapshot.data.headerMode='detached'` 并配上 `nameRef`。不能用 inline 模式 + 把 refs 多带 1 行兜底表头来替代——那种写法已废弃。否则图表会把错误的首行/首列当系列名,或图例显示成"系列1/系列2"等默认名,或者 refs 里混入相邻分组的数据。
|
|
49
|
-
>
|
|
50
|
-
> **触发该规则的典型信号**(满足任意一条都必须走 detached):
|
|
51
|
-
> - 用户要求"针对 X 类的数据画图"、"只看某个分组"、"只画筛选后的部分",而 X 类对应的行段在数据中间或末尾,与表头不连续;
|
|
52
|
-
> - 用户要求"按 X 分别画图"、"按某个维度(部门/品类/地区/时间段等)拆图"——**多张图共享同一组表头**;
|
|
53
|
-
> - `refs` 起始行 > 表头行(如表头在第 1 行,但 `refs` 从第 11 行开始);
|
|
54
|
-
> - `refs` 起始列 > 表头列(如表头在 A 列,但 `refs` 从 C 列开始)。
|
|
55
|
-
>
|
|
56
|
-
> **正确做法**:
|
|
57
|
-
> 1. 在 `data` 下显式设置 `"headerMode": "detached"`;
|
|
58
|
-
> 2. `refs` **只覆盖该子集的纯数据**,不要向上/向左多带 1 行/列,也不要把全局表头整段并进来(否则会把其它分组的数据混进图);
|
|
59
|
-
> 3. **`nameRef` 必填**:给 `dim1.serie.nameRef` 写真正表头中"类别名"那一格的 A1 引用(如 `'Sheet2'!A1`,sheet 名按 A1 标准单引号包裹),给每个 `dim2.series[i].nameRef` 写对应数值列的 A1 引用(如 `'Sheet2'!C1`、`'Sheet2'!D1`)。任一缺失会被校验拦下并报 `headerMode=detached requires ... nameRef`;
|
|
60
|
-
> 4. `refs[i].value` 必须是单元格或普通矩形范围(CELL / NORMAL),不接受整行/整列/开区间;`direction='column'` 时起始行必须 > 0,`direction='row'` 时起始列必须 > 0;
|
|
61
|
-
> 5. `index` 仍按 `refs` 内的列/行号填,从 1 开始。
|
|
62
|
-
>
|
|
63
|
-
> **两种场景对照(互斥,二选一)**:
|
|
64
|
-
>
|
|
65
|
-
> | 场景 | 何时命中 | 写法 |
|
|
66
|
-
> |---|---|---|
|
|
67
|
-
> | A. 表头与数据连在一起 | 单张图、refs 首行/首列就是表头(典型整段画图) | **省略 headerMode**(默认 inline),refs 含表头,**不写 nameRef** |
|
|
68
|
-
> | B. 表头与数据分离 | 上面 4 条信号任一命中(数据子集、按维度拆图等) | **`headerMode='detached'`**,refs 仅纯数据,**`nameRef` 必填** |
|
|
69
|
-
>
|
|
70
|
-
> **反向约束**:场景 A 下不要写 `nameRef`——首行命名已经生效,多写反而冗余。`nameRef` 仅在场景 B 下使用(且必填)。
|
|
93
|
+
- 默认让 `--data-range` 包含真正的表头行 / 列;表头上方的合并大标题必须跳过。
|
|
94
|
+
- 数据和语义表头分离时,`--data-range` 只传纯数据,`--header-range` 传对应的一行(column)或一列(row)表头。范围可以是不连续多范围,也支持来自多个子表;不要因为跨子表就退回原始 snapshot。
|
|
95
|
+
- 横向类别行属于 `--data-range`,不是 `--header-range`;按行组织时传 `--data-direction row`。
|
|
96
|
+
- **数据源必须是数值 / 日期型**:图表只渲染数值型单元格。用 `+cells-set` 构造数据源时,给数字 / 日期单元格设 `cell_styles.number_format`,不要留成纯文本,否则该系列渲染为空。
|
|
97
|
+
- **数值 / 日期显示异常**:坐标轴沿用源单元格格式。日期显示成序列号、大数值显示成科学计数法时,修正源数据的 `cell_styles.number_format`,不要给图表轴构造未定义的 format 字段。
|
|
98
|
+
- **轴口径错误**:用户要"占比 / 比例"时,用饼图或 `--stack percent`,并核对数据源与标签确实表达百分比,不要交付仍以原始计数为纵轴的图。
|
|
99
|
+
- **对象语义验证**:基础单图先核对返回的完整 `snapshot`;批量创建、响应不完整、后续又更新或结果存疑时,再按受影响的 sheet 调一次 `+chart-list`。这里只核对数量、数据源、方向、系列和配置,不能代替交付前的布局检查。
|
|
100
|
+
|
|
101
|
+
> **⚠️ 硬性规则:当用户通过列标题名称(而非列索引)指定横轴/纵轴系列时,必须先读取表格首行(表头)来确定列名与列索引的对应关系,再设置普通图表的 `--dim1-index` / `--dim2-indexes` 或气泡图的角色索引。**
|
|
102
|
+
> 例如用户说"横轴为车型系列,纵轴为 Q1-Q4 的销量",不能猜测列索引;先用 `+cells-get` 读取数据源范围的表头,再将确认后的 1-based 索引传给 `+chart-create-basic`。
|
|
71
103
|
|
|
72
104
|
## ⚠️ chart 数据源引用 pivot 时必须排除总计行
|
|
73
105
|
|
|
@@ -79,7 +111,7 @@
|
|
|
79
111
|
1. `+pivot-create create` 返回 `sheet_id` + `pivot_table_id`
|
|
80
112
|
2. 调 `+csv-get(sheet_id, 'A1:E30')` 或 `+pivot-list` 读 pivot 产物的**实际数据范围**
|
|
81
113
|
3. 识别并排除"总计"/"小计"行(通常最后一行;嵌套 pivot 还要排除中间层小计)
|
|
82
|
-
4. `+chart-create
|
|
114
|
+
4. 用 `+chart-create-basic` 创建图表,`--data-range` 精确到数据行(如 pivot 占 A1:D9、总计在 row9 → chart 用 `A1:D8`)
|
|
83
115
|
|
|
84
116
|
## 图表位置选择(创建前必做)
|
|
85
117
|
|
|
@@ -99,11 +131,24 @@
|
|
|
99
131
|
- ✅ `{row: 42, col: "A"}` — 放数据下方
|
|
100
132
|
- ✅ 先 `+dim-insert --position V --count 6`(在 V 列前插 6 列,即 U 列之后),再放图到 `{row: 0, col: "V"}`
|
|
101
133
|
|
|
134
|
+
**标题与轴文案**:优先沿用用户明确指定的文案;未指定时,只根据已读取的表头生成简洁自然语言。图表标题概括对象、指标及必要的趋势/对比关系;副标题仅补充已确认的时间范围或统计口径,无必要则省略;X 轴写类别或时间维度,Y 轴写指标名,单位明确时可附单位。禁止把单元格引用、公式、内部 ID、占位符、未解析文字、乱码或空括号写入标题,也不得臆造时间、单位和业务口径。
|
|
135
|
+
|
|
136
|
+
## 交付前验收(任何图表改动后必做)
|
|
137
|
+
|
|
138
|
+
完成本次所有图表创建或更新后,再逐图核对以下项;全部通过才算完成:
|
|
139
|
+
|
|
140
|
+
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 时只重试一次;仍失败则明确报告布局未完成验收,禁止用人工估算代替。
|
|
143
|
+
|
|
102
144
|
## Shortcuts
|
|
103
145
|
|
|
104
146
|
| Shortcut | Risk | 分组 |
|
|
105
147
|
| --- | --- | --- |
|
|
106
148
|
| `+chart-list` | read | 对象 |
|
|
149
|
+
| `+chart-create-basic` | write | 对象 |
|
|
150
|
+
| `+chart-config-update` | write | 对象 |
|
|
151
|
+
| `+chart-data-update` | write | 对象 |
|
|
107
152
|
| `+chart-create` | write | 对象 |
|
|
108
153
|
| `+chart-update` | write | 对象 |
|
|
109
154
|
| `+chart-delete` | high-risk-write | 对象 |
|
|
@@ -118,6 +163,95 @@ _公共四件套 · 系统:`--dry-run`_
|
|
|
118
163
|
| --- | --- | --- | --- |
|
|
119
164
|
| `--chart-id` | string | optional | 指定单个图表 reference_id 过滤 |
|
|
120
165
|
|
|
166
|
+
### `+chart-create-basic`
|
|
167
|
+
|
|
168
|
+
_公共四件套 · 系统:`--dry-run`_
|
|
169
|
+
|
|
170
|
+
| Flag | Type | 必填 | 说明 |
|
|
171
|
+
| --- | --- | --- | --- |
|
|
172
|
+
| `--chart-type` | string | required | 图表类型(可选值:`column` / `bar` / `line` / `area` / `pie` / `scatter` / `combo` / `radar` / `bubble` / `waterfall` / `pareto`) |
|
|
173
|
+
| `--data-range` | string | required | 数据范围;未传 --header-range 时须包含表头,传入时只传纯数据;支持逗号分隔及跨子表多范围 |
|
|
174
|
+
| `--header-range` | string | optional | 可选的分离表头范围;column 方向须为一行、row 方向须为一列,表头数须等于数据维度数 |
|
|
175
|
+
| `--data-direction` | string | optional | 数据系列方向;column 表示首列为类别,row 表示首行为类别(可选值:`column` / `row`)(默认 `column`) |
|
|
176
|
+
| `--x-axis-numbers-as` | string | optional | 横轴数字的解释方式;text 将数字视为等间距文本类别,values 按连续数值及真实间距绘制(可选值:`text` / `values`)(默认 `text`) |
|
|
177
|
+
| `--x-axis-min` | float64 | optional | 连续数值 X 轴的显示范围下界;需同时使用 --x-axis-numbers-as values |
|
|
178
|
+
| `--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 |
|
|
182
|
+
| `--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 轴,逗号分隔,数量必须与数值系列一致 |
|
|
185
|
+
| `--key-index` | int | optional | 仅气泡图:标识/名称维度的 1-based 索引;与 dim1/dim2 索引互斥,默认 1 |
|
|
186
|
+
| `--x-index` | int | optional | 仅气泡图:X 值维度的 1-based 索引;须与 --y-index 一起提供 |
|
|
187
|
+
| `--y-index` | int | optional | 仅气泡图:Y 值维度的 1-based 索引;须与 --x-index 一起提供 |
|
|
188
|
+
| `--group-index` | int | optional | 仅气泡图:可选分组维度的 1-based 索引 |
|
|
189
|
+
| `--size-index` | int | optional | 仅气泡图:可选气泡大小维度的 1-based 索引 |
|
|
190
|
+
| `--title` | string | optional | 图表标题 |
|
|
191
|
+
| `--subtitle` | string | optional | 图表副标题 |
|
|
192
|
+
| `--legend-position` | string | optional | 图例位置;hidden 隐藏图例(可选值:`top` / `bottom` / `left` / `right` / `hidden`) |
|
|
193
|
+
| `--x-axis-title` | string | optional | X 轴标题 |
|
|
194
|
+
| `--y-axis-title` | string | optional | 左 Y 轴标题 |
|
|
195
|
+
| `--secondary-y-axis-title` | string | optional | 右 Y 轴标题 |
|
|
196
|
+
| `--x-axis-label-angle` | int | optional | X 轴标签旋转角度(可选值:`-90` / `-45` / `0` / `45` / `90`) |
|
|
197
|
+
| `--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`) |
|
|
200
|
+
| `--stack` | string | optional | 堆叠模式(可选值:`none` / `normal` / `percent`) |
|
|
201
|
+
| `--stacked` | bool | optional | 兼容别名;等价于 --stack normal(隐藏 flag:不在 `--help` 列出,但可正常传入) |
|
|
202
|
+
| `--smooth` | bool | optional | 是否使用平滑曲线;支持 --smooth=false 和 --smooth false |
|
|
203
|
+
| `--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
|
+
| `--colors` | string_slice | optional | 自定义整图系列颜色,逗号分隔且至少 2 个十六进制色值;与 --color-palette 互斥 |
|
|
205
|
+
| `--anchor-cell` | string | optional | 可选图表锚点单元格,如 F2;省略时放到数据范围右侧 |
|
|
206
|
+
| `--width` | int | optional | 可选图表宽度;必须与 --height 同时传 |
|
|
207
|
+
| `--height` | int | optional | 可选图表高度;必须与 --width 同时传 |
|
|
208
|
+
|
|
209
|
+
### `+chart-config-update`
|
|
210
|
+
|
|
211
|
+
_公共四件套 · 系统:`--dry-run`_
|
|
212
|
+
|
|
213
|
+
| Flag | Type | 必填 | 说明 |
|
|
214
|
+
| --- | --- | --- | --- |
|
|
215
|
+
| `--chart-id` | string | required | 目标图表 reference_id |
|
|
216
|
+
| `--title` | string | optional | 图表标题 |
|
|
217
|
+
| `--subtitle` | string | optional | 图表副标题 |
|
|
218
|
+
| `--legend-position` | string | optional | 图例位置;hidden 隐藏图例(可选值:`top` / `bottom` / `left` / `right` / `hidden`) |
|
|
219
|
+
| `--x-axis-title` | string | optional | X 轴标题 |
|
|
220
|
+
| `--y-axis-title` | string | optional | 左 Y 轴标题 |
|
|
221
|
+
| `--secondary-y-axis-title` | string | optional | 右 Y 轴标题 |
|
|
222
|
+
| `--x-axis-label-angle` | int | optional | X 轴标签旋转角度(可选值:`-90` / `-45` / `0` / `45` / `90`) |
|
|
223
|
+
| `--y-axis-label-angle` | int | optional | 左 Y 轴标签旋转角度(可选值:`-90` / `-45` / `0` / `45` / `90`) |
|
|
224
|
+
| `--x-axis-min` | float64 | optional | 连续数值 X 轴的显示范围下界;必须小于 --x-axis-max |
|
|
225
|
+
| `--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 |
|
|
228
|
+
| `--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
|
+
| `--data-label-position` | string | optional | 仅当用户明确指定时传入;只调整已有数据标签的位置,不会单独开启标签;省略时按图表类型自动优化数据标签位置(可选值:`auto` / `top` / `bottom` / `left` / `right` / `center` / `inside` / `outside`) |
|
|
230
|
+
| `--last-point-label` | bool | optional | 仅折线图、面积图、雷达图及组合图中的线性系列;true 开启每个系列最后一个数据点的数值标签,false 关闭这些单点标签 |
|
|
231
|
+
| `--stack` | string | optional | 堆叠模式(可选值:`none` / `normal` / `percent`) |
|
|
232
|
+
| `--stacked` | bool | optional | 兼容别名;等价于 --stack normal(隐藏 flag:不在 `--help` 列出,但可正常传入) |
|
|
233
|
+
| `--smooth` | bool | optional | 是否使用平滑曲线;支持 --smooth=false 和 --smooth false |
|
|
234
|
+
| `--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
|
+
| `--colors` | string_slice | optional | 自定义整图系列颜色,逗号分隔且至少 2 个十六进制色值;与 --color-palette 互斥 |
|
|
236
|
+
|
|
237
|
+
### `+chart-data-update`
|
|
238
|
+
|
|
239
|
+
_公共四件套 · 系统:`--dry-run`_
|
|
240
|
+
|
|
241
|
+
| Flag | Type | 必填 | 说明 |
|
|
242
|
+
| --- | --- | --- | --- |
|
|
243
|
+
| `--chart-id` | string | required | 目标图表 reference_id |
|
|
244
|
+
| `--data-range` | string | required | 新数据范围;未传 --header-range 时须包含表头,传入或原图已使用分离表头时只传纯数据;支持逗号分隔及跨子表多范围 |
|
|
245
|
+
| `--header-range` | string | optional | 可选的分离表头范围;提供后自动使用 detached 表头映射,省略时保留原图已有的 detached 映射 |
|
|
246
|
+
| `--data-direction` | string | optional | 数据系列方向;省略时沿用现有图表方向(可选值:`column` / `row`) |
|
|
247
|
+
| `--dim1-index` | int | optional | 类别/X 轴维度在数据范围中的 1-based 索引;省略时使用第 1 个维度 |
|
|
248
|
+
| `--dim2-indexes` | string | optional | 值/Y 轴系列在数据范围中的 1-based 索引,逗号分隔;省略时使用除 dim1 外的全部维度 |
|
|
249
|
+
| `--key-index` | int | optional | 仅气泡图:标识/名称维度的 1-based 索引;与 dim1/dim2 索引互斥,默认 1 |
|
|
250
|
+
| `--x-index` | int | optional | 仅气泡图:X 值维度的 1-based 索引;须与 --y-index 一起提供 |
|
|
251
|
+
| `--y-index` | int | optional | 仅气泡图:Y 值维度的 1-based 索引;须与 --x-index 一起提供 |
|
|
252
|
+
| `--group-index` | int | optional | 仅气泡图:可选分组维度的 1-based 索引 |
|
|
253
|
+
| `--size-index` | int | optional | 仅气泡图:可选气泡大小维度的 1-based 索引 |
|
|
254
|
+
|
|
121
255
|
### `+chart-create`
|
|
122
256
|
|
|
123
257
|
_公共四件套 · 系统:`--dry-run`_
|
|
@@ -125,7 +259,7 @@ _公共四件套 · 系统:`--dry-run`_
|
|
|
125
259
|
| Flag | Type | 必填 | 说明 |
|
|
126
260
|
| --- | --- | --- | --- |
|
|
127
261
|
| `--properties` | string + File + Stdin(复合 JSON) | required | 图表完整配置 JSON。顶层字段为 `position` / `offset` / `size` / `snapshot`(无顶层 `data`,也无再嵌一层 `properties`);图表数据配置在 `snapshot.data` 下(含 `refs` / `headerMode` / `dim1` / `dim2`);必须至少含 `snapshot.data.dim1.serie.index` 或 `dim2.series[].index` 之一,否则 server 拒。结构嵌套深,完整结构跑 `--print-schema --flag-name properties` |
|
|
128
|
-
| `--print-example` | string | optional | 打印指定图表类型的最小可用 `--properties` 模板后直接退出(`area` / `bar` / `column` / `combo` / `line` / `pie` / `radar` / `scatter`)。纯本地执行,不需要 locator flag、不发网络请求;传入未知类型时列出全部可用类型 |
|
|
262
|
+
| `--print-example` | string | optional | 打印指定图表类型的最小可用 `--properties` 模板后直接退出(`area` / `bar` / `bubble` / `column` / `combo` / `line` / `pareto` / `pie` / `radar` / `scatter` / `waterfall`)。纯本地执行,不需要 locator flag、不发网络请求;传入未知类型时列出全部可用类型 |
|
|
129
263
|
|
|
130
264
|
### `+chart-update`
|
|
131
265
|
|
|
@@ -134,7 +268,7 @@ _公共四件套 · 系统:`--dry-run`_
|
|
|
134
268
|
| Flag | Type | 必填 | 说明 |
|
|
135
269
|
| --- | --- | --- | --- |
|
|
136
270
|
| `--chart-id` | string | required | 目标图表 reference_id |
|
|
137
|
-
| `--properties` | string + File + Stdin(复合 JSON) | required |
|
|
271
|
+
| `--properties` | string + File + Stdin(复合 JSON) | required | 图表配置补丁 JSON;默认只传变化字段,未传字段保持不变;普通对象递归合并,数组整体替换 |
|
|
138
272
|
|
|
139
273
|
### `+chart-delete`
|
|
140
274
|
|
|
@@ -156,7 +290,8 @@ _创建/更新的图表属性_
|
|
|
156
290
|
- `position` (object?) — 必填 { row: number, col: string }
|
|
157
291
|
- `offset` (object?) — 可选 { row_offset?: number, col_offset?: number }
|
|
158
292
|
- `size` (object?) — 必填 { width: number, height: number }
|
|
159
|
-
- `
|
|
293
|
+
- `last_point_label` (boolean?) — update 使用
|
|
294
|
+
- `snapshot` (oneOf?) — 图表快照配置
|
|
160
295
|
|
|
161
296
|
## Examples
|
|
162
297
|
|
|
@@ -166,149 +301,151 @@ _创建/更新的图表属性_
|
|
|
166
301
|
|
|
167
302
|
输出契约:返回按工作表分组的图表列表,每个图表含 `chart_id` / `position` / `details.snapshot` 等。
|
|
168
303
|
|
|
169
|
-
### `+chart-create`
|
|
170
|
-
|
|
171
|
-
> **`snapshot.data` 必填 `dim1.serie.index` 或 `dim2.series[].index` 之一**(1-based,对应 `refs.value` 范围内的列序)。schema 允许传空 `{}` 但 server 运行时强制:缺则被拒为 `snapshot.data.dim1.serie.index and dim2.series[].index are both missing; at least one must be set`,即便侥幸通过也只会渲染空图。
|
|
304
|
+
### `+chart-create-basic`
|
|
172
305
|
|
|
173
|
-
|
|
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` 会按轴标题处理;新调用仍优先使用规范参数名。
|
|
174
307
|
|
|
175
|
-
|
|
308
|
+
**连续数值 X 轴的可读性**:`--x-axis-numbers-as values` 会保留数字的真实间距,但未指定范围时可能自动包含 0。如果数据集中在远离 0 的窄区间,数据点会挤在图表一侧;此时应保留 `values`,创建时用 `--x-axis-min` / `--x-axis-max` 收紧范围,已有图表用 `+chart-config-update` 修正,不要改成 `text` 掩盖问题。两个边界可单独设置;同时设置时 min 必须小于 max。
|
|
176
309
|
|
|
177
310
|
```bash
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
"
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
311
|
+
# 柱形图:默认放在数据范围右侧
|
|
312
|
+
lark-cli sheets +chart-create-basic --url "..." --sheet-name "Sheet1" \
|
|
313
|
+
--chart-type column --data-range "'Sheet1'!A1:C10" \
|
|
314
|
+
--title "销售额对比" --x-axis-title "品类" --y-axis-title "销售额" \
|
|
315
|
+
--legend-position bottom --data-labels value
|
|
316
|
+
|
|
317
|
+
# 双轴组合图:月度目标、实际完成为左轴柱,完成率为右轴折线
|
|
318
|
+
lark-cli sheets +chart-create-basic --url "..." --sheet-name "Sheet1" \
|
|
319
|
+
--chart-type combo --data-range "'Sheet1'!A1:D13" \
|
|
320
|
+
--dim1-index 1 --dim2-indexes 2,3,4 \
|
|
321
|
+
--series-types column,column,line --series-y-axes left,left,right \
|
|
322
|
+
--title "价格与效率" --y-axis-title "价格" --secondary-y-axis-title "效率" \
|
|
323
|
+
--anchor-cell F2 --width 700 --height 400
|
|
324
|
+
|
|
325
|
+
# 气泡图:x、y 必填,group、size 可选
|
|
326
|
+
lark-cli sheets +chart-create-basic --url "..." --sheet-name "Sheet1" \
|
|
327
|
+
--chart-type bubble --data-range "'Sheet1'!A1:E20" \
|
|
328
|
+
--key-index 1 --x-index 2 --y-index 3 --group-index 4 --size-index 5 \
|
|
329
|
+
--title "客户分布"
|
|
330
|
+
|
|
331
|
+
# 数值散点图:保留真实 X 间距,同时收紧远离 0 的显示范围
|
|
332
|
+
lark-cli sheets +chart-create-basic --url "..." --sheet-name "Sheet1" \
|
|
333
|
+
--chart-type scatter --data-range "'Sheet1'!A1:B20" \
|
|
334
|
+
--x-axis-numbers-as values --x-axis-min 237 --x-axis-max 239
|
|
335
|
+
|
|
336
|
+
# 表头与数据分离:data-range 只传纯数据,header-range 按相同维度顺序传表头
|
|
337
|
+
lark-cli sheets +chart-create-basic --url "..." --sheet-name "Sheet1" \
|
|
338
|
+
--chart-type line \
|
|
339
|
+
--data-range "'Sheet1'!A2:A10,'Sheet1'!K2:L10" \
|
|
340
|
+
--header-range "'Sheet1'!A1,'Sheet1'!K1:L1"
|
|
341
|
+
|
|
342
|
+
# 横向类别行 + 一行数值:类别行也属于 data-range,不要放进 header-range
|
|
343
|
+
lark-cli sheets +chart-create-basic --url "..." --sheet-name "Sheet1" \
|
|
344
|
+
--chart-type line \
|
|
345
|
+
--data-range "'Sheet1'!A1:M1,'Sheet1'!A3:M3" \
|
|
346
|
+
--data-direction row --dim1-index 1 --dim2-indexes 2
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
多张基础图一次创建。先把所有数据准备完成,再生成 `ops.json`:
|
|
350
|
+
|
|
351
|
+
```json
|
|
352
|
+
[
|
|
353
|
+
{
|
|
354
|
+
"sheet_name": "Sheet1",
|
|
355
|
+
"chart_type": "column",
|
|
356
|
+
"data_range": "'Sheet1'!A1:C10",
|
|
357
|
+
"title": "分类对比",
|
|
358
|
+
"anchor_cell": "F2"
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"sheet_name": "Sheet1",
|
|
362
|
+
"chart_type": "line",
|
|
363
|
+
"data_range": "'Sheet1'!E1:G10",
|
|
364
|
+
"title": "趋势变化",
|
|
365
|
+
"anchor_cell": "F18"
|
|
190
366
|
}
|
|
191
|
-
|
|
192
|
-
|
|
367
|
+
]
|
|
368
|
+
```
|
|
193
369
|
|
|
194
|
-
|
|
195
|
-
lark-cli sheets +chart-create --url "..." --
|
|
370
|
+
```bash
|
|
371
|
+
lark-cli sheets +batch-chart-create --url "..." --operations @ops.json
|
|
372
|
+
lark-cli sheets +chart-list --url "..." --sheet-name "Sheet1"
|
|
196
373
|
```
|
|
197
374
|
|
|
198
|
-
|
|
375
|
+
为了兼容旧调用,CLI 仍能读取历史 `{shortcut:"+chart-create-basic",input:{...}}` 结构,但新任务直接填写上面的扁平 `+chart-create-basic` flags。
|
|
199
376
|
|
|
200
|
-
|
|
377
|
+
批量修正已有图表时,operations 只放配置或数据更新;CLI 会先读取每张目标图的当前快照,再把对应 partial properties 合并进一次 `batch_update`:
|
|
378
|
+
|
|
379
|
+
```json
|
|
380
|
+
[
|
|
381
|
+
{"shortcut":"+chart-config-update","input":{"sheet_name":"Sheet1","chart_id":"chrA","title":"新标题"}},
|
|
382
|
+
{"shortcut":"+chart-data-update","input":{"sheet_name":"Sheet1","chart_id":"chrB","data_range":"'Sheet1'!A1:D10"}}
|
|
383
|
+
]
|
|
384
|
+
```
|
|
201
385
|
|
|
202
386
|
```bash
|
|
203
|
-
lark-cli sheets +chart-
|
|
204
|
-
{
|
|
205
|
-
"position":{"row":24,"col":"F"},
|
|
206
|
-
"size":{"width":600,"height":450},
|
|
207
|
-
"snapshot":{
|
|
208
|
-
"title":{"text":"各部门员工人数占比"},
|
|
209
|
-
"plotArea":{"plot":{
|
|
210
|
-
"type":"pie",
|
|
211
|
-
"series":[{
|
|
212
|
-
"index":1,
|
|
213
|
-
"sectors":{"sector":[{"index":1,"offsetRadius":0.05}]}
|
|
214
|
-
}]
|
|
215
|
-
}},
|
|
216
|
-
"data":{
|
|
217
|
-
"refs":[{"value":"'Sheet1'!A1:B11"}],
|
|
218
|
-
"dim1":{"serie":{"index":1,"aggregate":true}},
|
|
219
|
-
"dim2":{"series":[{"index":2,"aggregateType":"sum"}]}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
JSON
|
|
387
|
+
lark-cli sheets +batch-chart-update --url "..." --operations @updates.json
|
|
224
388
|
```
|
|
225
389
|
|
|
226
|
-
|
|
390
|
+
### `+chart-data-update`
|
|
227
391
|
|
|
228
|
-
|
|
392
|
+
当创建后发现漏列、范围过宽、辅助分类列发生变化、系列选择错误或数据方向错误时,只更新数据源,保留标题、配色、图例和落点。更新必须指定 `--chart-id`;范围、方向、普通 dim1/dim2 索引及气泡图角色索引的语义与 `+chart-create-basic` 相同。`--data-direction` 省略时沿用现有图表方向。默认让新范围包含表头;原图已经使用 detached 表头且表头不变时可省略 `--header-range`,工具会保留现有映射。工具返回更新后的 `data` 和实际采用的 `normalized_data_ranges`。
|
|
229
393
|
|
|
230
394
|
```bash
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
"
|
|
234
|
-
"size":{"width":600,"height":360},
|
|
235
|
-
"snapshot":{
|
|
236
|
-
"title":{"text":"3 号店周度订单/退款"},
|
|
237
|
-
"plotArea":{"plot":{"type":"column"}},
|
|
238
|
-
"data":{
|
|
239
|
-
"headerMode":"detached",
|
|
240
|
-
"direction":"column",
|
|
241
|
-
"refs":[{"value":"'Sheet2'!A11:D17"}],
|
|
242
|
-
"dim1":{"serie":{"index":1,"nameRef":"'Sheet2'!A1"}},
|
|
243
|
-
"dim2":{"series":[
|
|
244
|
-
{"index":3,"nameRef":"'Sheet2'!C1"},
|
|
245
|
-
{"index":4,"nameRef":"'Sheet2'!D1"}
|
|
246
|
-
]}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
JSON
|
|
395
|
+
# 把遗漏的最后一列纳入原折线图,保留标题、配色、图例和落点
|
|
396
|
+
lark-cli sheets +chart-data-update --url "..." --sheet-id "$SID" --chart-id "chrXXX" \
|
|
397
|
+
--data-range "'Sheet1'!A1:M6"
|
|
251
398
|
```
|
|
252
399
|
|
|
253
|
-
|
|
254
|
-
- `refs` 只覆盖纯数据 `A11:D17`,**不要**把表头行 A1 并进来
|
|
255
|
-
- `nameRef` 在 detached 模式下**必填**,缺了被校验报 `headerMode=detached requires ... nameRef`
|
|
256
|
-
- `index` 按 refs 内的列序算(A=1、B=2、C=3、D=4),**不是**全表列号
|
|
257
|
-
- `nameRef` 必须配对应的 `index`;单写 `nameRef` 不传 `index` 直接报参数错
|
|
400
|
+
### `+chart-config-update`
|
|
258
401
|
|
|
259
|
-
|
|
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` 处理;新调用仍优先使用规范参数。
|
|
260
403
|
|
|
261
|
-
|
|
404
|
+
```bash
|
|
405
|
+
lark-cli sheets +chart-config-update --url "..." --sheet-id "$SID" --chart-id "chrXXX" \
|
|
406
|
+
--title "新标题" --x-axis-label-angle -45 --legend-position right
|
|
262
407
|
|
|
263
|
-
|
|
408
|
+
lark-cli sheets +chart-config-update --url "..." --sheet-id "$SID" --chart-id "chrXXX" \
|
|
409
|
+
--data-labels value_percentage --stack percent
|
|
264
410
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
{"data":{"refs":[{"value":"'Sheet'!A1:E17"}], ... }} // 华东图混进华北 8 行
|
|
268
|
-
// 错误 2:inline + refs 只取数据段、不写 detached/nameRef —— 图例显示成具体数据值
|
|
269
|
-
{"data":{"refs":[{"value":"'Sheet'!A10:E17"}],"dim1":{"serie":{"index":1}}, ... }}
|
|
411
|
+
lark-cli sheets +chart-config-update --url "..." --sheet-id "$SID" --chart-id "chrXXX" \
|
|
412
|
+
--last-point-label=true
|
|
270
413
|
```
|
|
271
414
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
```jsonc
|
|
275
|
-
// 图 1:华北
|
|
276
|
-
{"data":{
|
|
277
|
-
"headerMode":"detached","direction":"column",
|
|
278
|
-
"refs":[{"value":"'Sheet'!A2:E9"}],
|
|
279
|
-
"dim1":{"serie":{"index":1,"nameRef":"'Sheet'!A1"}},
|
|
280
|
-
"dim2":{"series":[
|
|
281
|
-
{"index":3,"nameRef":"'Sheet'!C1"},
|
|
282
|
-
{"index":4,"nameRef":"'Sheet'!D1"}
|
|
283
|
-
]}
|
|
284
|
-
}}
|
|
285
|
-
// 图 2:华东 —— refs 改 'Sheet'!A10:E17,其余同上
|
|
286
|
-
// 图 3:华南 —— refs 改 'Sheet'!A18:E25,其余同上
|
|
287
|
-
```
|
|
415
|
+
### `+chart-create`
|
|
288
416
|
|
|
289
|
-
|
|
290
|
-
> - `position.row` / `position.col` 必须留足空间,越界会被 API 拒(按本文件"图表位置选择"四步走)
|
|
291
|
-
> - `snapshot.data.headerMode`:默认 inline;当 refs 仅覆盖数据子集而语义表头在子集之外,必须 `detached` + `nameRef`
|
|
292
|
-
> - chart 引用 pivot 输出时,`snapshot.data.refs` 必须排除总计 / 小计行
|
|
417
|
+
基础图表优先使用 `+chart-create-basic`。仅当语义 shortcut 无法表达单系列、单数据点或高级引擎字段时,才使用 `+chart-create`。高级创建需要结构完整的 snapshot;先用 `+chart-create --print-example <type>` 取得对应图表类型的最小结构,再只修改任务需要的字段。不要先打印或阅读整份大 schema。
|
|
293
418
|
|
|
294
419
|
### `+chart-update`
|
|
295
420
|
|
|
296
|
-
|
|
421
|
+
标题、轴、图例、标签、堆叠、平滑、配色优先使用 `+chart-config-update`,数据范围和方向使用 `+chart-data-update`。只有高级字段才使用 `+chart-update`;不要为常见修改构造 raw properties。
|
|
422
|
+
|
|
423
|
+
`+chart-update` 支持真正的局部更新:只传实际变化的字段,未传字段保持不变,不要复制并回写完整 snapshot。
|
|
297
424
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
425
|
+
- `snapshot` 内普通对象递归合并;
|
|
426
|
+
- `refs` / `axes` / `series` 等数组整体替换。只改数组中的一项时,先从 `+chart-list` 读取当前完整数组,修改后只回写该数组;
|
|
427
|
+
- `snapshot.data.isStaticData` 不能通过 update 改变;需要切换静态 / 非静态数据时删除后重建;
|
|
428
|
+
- 只调整尺寸时直接传 `size`,不需要传 `snapshot`;
|
|
429
|
+
- 执行前用 `--dry-run` 检查目标 sheet、chart_id 和最小 patch,执行后用 `+chart-list --chart-id <id>` 核对实际 snapshot。
|
|
301
430
|
|
|
302
431
|
```bash
|
|
432
|
+
# 只调整尺寸;无需携带 snapshot
|
|
303
433
|
lark-cli sheets +chart-update --url "..." --sheet-id "$SID" --chart-id "chrXXX" \
|
|
304
|
-
--properties '{
|
|
305
|
-
"position":{"row":0,"col":"A"},
|
|
306
|
-
"size":{"width":480,"height":320},
|
|
307
|
-
"snapshot": <完整快照(由 +chart-list 取回后局部修改)>
|
|
308
|
-
}'
|
|
434
|
+
--properties '{"size":{"width":640,"height":360}}'
|
|
309
435
|
```
|
|
310
436
|
|
|
311
|
-
|
|
437
|
+
#### 高级 `properties` 边界
|
|
438
|
+
|
|
439
|
+
- 只查询本次要改的子树,不先打印完整大 schema:
|
|
440
|
+
```bash
|
|
441
|
+
lark-cli sheets +chart-update --print-schema \
|
|
442
|
+
--flag-name properties.snapshot.plotArea.axes
|
|
443
|
+
```
|
|
444
|
+
- `--dry-run` 输出中的 `tool_name` / `operation` / `basic_chart` / `properties` 是 CLI 翻译后的内部请求,只用于检查,不能复制回 operations 或再次当作 MCP body 提交。
|
|
445
|
+
- `--data-range` 本身支持逗号分隔的多个范围和跨子表范围。仅因数据不连续或跨子表,不构成手写 raw data 映射的理由。
|
|
446
|
+
- raw data 使用 inline 表头时,`refs` 包含真正表头且不写 `nameRef`;只有 `refs` 只覆盖纯数据、真正表头位于范围外时才用 detached:显式设置 `headerMode='detached'`,并让 `dim1.serie.nameRef` 与每个 `dim2.series[].nameRef` 指向对应表头单元格。
|
|
447
|
+
- raw 堆叠字段位于 `snapshot.plotArea.plot.extra.stack`;普通任务仍使用 `--stack normal|percent`。`plotArea.plot.labels` 对象的存在性就是开关,关闭标签时省略整个对象;普通任务使用 `--data-labels none`。
|
|
448
|
+
- `axes[].label` 不接受 `format` / `number_format`。日期、百分比和数值格式应修改源单元格的 `cell_styles.number_format`。
|
|
312
449
|
|
|
313
450
|
### `+chart-delete`
|
|
314
451
|
|
|
@@ -326,8 +463,8 @@ lark-cli sheets +chart-delete --url "https://example.feishu.cn/sheets/shtXXX" --
|
|
|
326
463
|
|
|
327
464
|
### Validate / DryRun / Execute 约束
|
|
328
465
|
|
|
329
|
-
- `Validate`:XOR 公共四件套;`+chart-create` / `+chart-update` 的 `--properties` 必须能解析为合法 JSON;`+chart-delete`(high-risk-write)校验 `--yes` 或 `--dry-run` 至少一个。
|
|
330
|
-
- `DryRun`:`+chart-create` / `+chart-update` 输出"将要 POST 的 body 模板";`+chart-delete` 输出"将要删除的 chart_id 及隶属 sheet",零网络副作用。
|
|
331
|
-
- `Execute
|
|
466
|
+
- `Validate`:XOR 公共四件套;`+chart-data-update` 要求 `--chart-id` 和 `--data-range`,并校验 `--dim1-index` / `--dim2-indexes` 是正整数索引;`+chart-create` / `+chart-update` 的 `--properties` 必须能解析为合法 JSON;`+chart-delete`(high-risk-write)校验 `--yes` 或 `--dry-run` 至少一个。
|
|
467
|
+
- `DryRun`:`+chart-data-update` / `+chart-create` / `+chart-update` 输出"将要 POST 的 body 模板";`+chart-delete` 输出"将要删除的 chart_id 及隶属 sheet",零网络副作用。
|
|
468
|
+
- `Execute`:`+chart-create-basic` 成功后返回完整 `snapshot`,可直接验证;批量创建、响应不完整、后续更新或结果存疑时,再按受影响 sheet 调用一次 `+chart-list` 比对结果。
|
|
332
469
|
|
|
333
470
|
> `+chart-create` / `+chart-update` 是 write 级别,按需可用 `--dry-run` 预览,不要求 `--yes`。只有 `+chart-delete`(high-risk-write)必须 `--yes`。
|