@amaster.ai/pi-lark 0.1.2-beta.41 → 0.1.2-beta.43
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 +3 -3
- package/skills/lark-apps/SKILL.md +18 -10
- package/skills/lark-apps/references/lark-apps-access-scope-set.md +1 -1
- package/skills/lark-apps/references/lark-apps-automation.md +164 -0
- package/skills/lark-apps/references/lark-apps-db-execute.md +185 -1
- package/skills/lark-apps/references/lark-apps-db.md +1 -1
- package/skills/lark-apps/references/lark-apps-get.md +43 -0
- package/skills/lark-apps/references/lark-apps-html-publish.md +7 -2
- package/skills/lark-apps/references/lark-apps-init.md +1 -2
- package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
- package/skills/lark-apps/references/lark-apps-release-create.md +3 -1
- package/skills/lark-apps/references/lark-apps-role.md +133 -0
- package/skills/lark-base/SKILL.md +2 -2
- package/skills/lark-base/references/dashboard-block-data-config.md +28 -2
- package/skills/lark-base/references/lark-base-cell-value.md +9 -4
- package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +7 -7
- package/skills/lark-base/references/lark-base-dashboard.md +11 -2
- package/skills/lark-base/references/lark-base-data-query.md +9 -7
- package/skills/lark-base/references/lark-base-field-create.md +4 -2
- package/skills/lark-base/references/lark-base-field-json.md +52 -15
- package/skills/lark-base/references/lark-base-field-update.md +4 -2
- package/skills/lark-calendar/references/lark-calendar-create.md +1 -0
- package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +2 -1
- package/skills/lark-drive/SKILL.md +14 -6
- package/skills/lark-drive/references/lark-drive-comment-location.md +16 -4
- package/skills/lark-drive/references/lark-drive-comments-guide.md +16 -8
- package/skills/lark-drive/references/lark-drive-delete.md +23 -11
- package/skills/lark-drive/references/lark-drive-export.md +39 -10
- package/skills/lark-drive/references/lark-drive-list-comments.md +125 -0
- package/skills/lark-drive/references/lark-drive-member-add.md +1 -1
- package/skills/lark-drive/references/lark-drive-move.md +5 -3
- package/skills/lark-drive/references/lark-drive-pull.md +3 -3
- package/skills/lark-drive/references/lark-drive-push.md +1 -1
- package/skills/lark-drive/references/lark-drive-status.md +12 -14
- package/skills/lark-drive/references/lark-drive-task-result.md +58 -5
- package/skills/lark-im/SKILL.md +5 -4
- package/skills/lark-im/references/lark-im-messages-reply.md +1 -1
- package/skills/lark-im/references/lark-im-messages-send.md +1 -1
- package/skills/lark-minutes/SKILL.md +19 -4
- package/skills/lark-minutes/references/lark-minutes-todo.md +2 -2
- package/skills/lark-shared/SKILL.md +9 -9
- package/skills/lark-sheets/SKILL.md +98 -29
- package/skills/lark-sheets/references/lark-sheets-batch-update.md +18 -9
- package/skills/lark-sheets/references/lark-sheets-changeset.md +105 -0
- package/skills/lark-sheets/references/lark-sheets-chart.md +4 -2
- package/skills/lark-sheets/references/lark-sheets-conditional-format.md +2 -0
- package/skills/lark-sheets/references/lark-sheets-filter-view.md +1 -1
- package/skills/lark-sheets/references/lark-sheets-float-image.md +6 -6
- package/skills/lark-sheets/references/lark-sheets-formula-translation.md +12 -3
- package/skills/lark-sheets/references/lark-sheets-formula-verify.md +77 -0
- package/skills/lark-sheets/references/lark-sheets-history.md +93 -0
- package/skills/lark-sheets/references/lark-sheets-pivot-table.md +7 -2
- package/skills/lark-sheets/references/lark-sheets-range-operations.md +44 -14
- package/skills/lark-sheets/references/lark-sheets-read-data.md +3 -3
- package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +4 -4
- package/skills/lark-sheets/references/lark-sheets-visual-standards.md +4 -4
- package/skills/lark-sheets/references/lark-sheets-workbook.md +29 -4
- package/skills/lark-sheets/references/lark-sheets-write-cells.md +21 -11
- package/skills/lark-slides/SKILL.md +29 -18
- package/skills/lark-slides/references/asset-planning.md +0 -1
- package/skills/lark-slides/references/examples.md +57 -227
- package/skills/lark-slides/references/iconpark.md +2 -2
- package/skills/lark-slides/references/lark-slides-create.md +21 -2
- package/skills/lark-slides/references/lark-slides-media-upload.md +0 -1
- package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +89 -0
- package/skills/lark-slides/references/lark-slides-replace-pages.md +1 -1
- package/skills/lark-slides/references/lark-slides-replace-slide.md +1 -1
- package/skills/lark-slides/references/lark-slides-screenshot.md +11 -8
- package/skills/lark-slides/references/lark-slides-xml-get.md +100 -0
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +9 -7
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +4 -4
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +12 -10
- package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +14 -13
- package/skills/lark-slides/references/planning-layer.md +1 -1
- package/skills/lark-slides/references/slides_xml_schema_definition.xml +7 -2
- package/skills/lark-slides/references/troubleshooting.md +7 -25
- package/skills/lark-slides/references/validation-checklist.md +18 -9
- package/skills/lark-slides/references/visual-planning.md +4 -3
- package/skills/lark-slides/references/xml-format-guide.md +20 -0
- package/skills/lark-slides/references/xml-schema-quick-ref.md +6 -2
- package/skills/lark-slides/scripts/xml_text_overlap_lint.py +647 -52
- package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +529 -0
- package/skills/lark-task/SKILL.md +1 -0
- package/skills/lark-vc-agent/SKILL.md +11 -4
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md +1 -1
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +1 -1
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-list-active.md +2 -2
- package/skills/lark-wiki/SKILL.md +4 -2
- package/skills/lark-wiki/references/lark-wiki-move-to-drive.md +122 -0
- package/skills/lark-wiki/references/lark-wiki-move.md +5 -3
- package/skills/lark-sheets/references/lark-sheets-core-operations.md +0 -103
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +0 -220
|
@@ -80,10 +80,10 @@ lark-cli vc +meeting-list-active --as bot --user-id <user_open_id> --format json
|
|
|
80
80
|
|---------|---------|---------|
|
|
81
81
|
| `--user-id is required when --as bot` | 应用身份未传目标用户 | 传入目标用户 open_id |
|
|
82
82
|
| 用户身份返回空列表 | 当前登录用户没有可见的进行中会议 | 确认用户是否在会中,或是否切错身份 |
|
|
83
|
-
| 用户身份无权限 / 不可见 | 当前登录用户没有可见的进行中会议,或当前身份无法读取该会议 | 不要反复执行 `auth login
|
|
83
|
+
| 用户身份无权限 / 不可见 | 当前登录用户没有可见的进行中会议,或当前身份无法读取该会议 | 不要反复执行 `auth login`。确认用户是否在会中、是否切错 profile;用户明确要查询应用机器人可见的会议时,再拿目标用户 open_id 执行 `+meeting-list-active --as bot --user-id <user_open_id>` |
|
|
84
84
|
| 应用身份返回空列表 | 没有满足“目标用户在会中且应用机器人也在会中”的当前会 | 先让应用机器人入会,或确认 `user_id` 和会议状态 |
|
|
85
85
|
| `--user-id` 格式错误 | 传入了 internal user_id 或其他非 `ou_...` 值 | 改传目标用户 open_id |
|
|
86
|
-
| 应用身份权限不足 | 应用权限、租户安装、权限可访问的数据范围或 VC Agent privilege 未配置完整 | 不要执行 `auth login
|
|
86
|
+
| 应用身份权限不足 | 应用权限、租户安装、权限可访问的数据范围或 VC Agent privilege 未配置完整 | 不要执行 `auth login`。请应用开发者开通 `vc:meeting.bot.join:write`;再检查应用发布/安装和权限可访问的数据范围,均正确仍失败时再排查内测灰度权限 |
|
|
87
87
|
|
|
88
88
|
## 参考
|
|
89
89
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lark-wiki
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.3
|
|
4
4
|
description: "飞书知识库:管理知识空间、空间成员和文档节点。创建和查询知识空间、查看和管理空间成员、管理节点层级结构、在知识库中组织文档和快捷方式。当用户需要在知识库中查找或创建文档、浏览知识空间结构、查看或管理空间成员、移动或复制节点时使用。当用户给出 doubao.com 的 /wiki/ URL/token 时,也应直接使用本 skill,不要因为域名不是飞书而回退到 WebFetch;路由依据是 URL 路径模式和 token,而不是域名。不负责:上传文件到知识库节点下(走 lark-drive)、编辑文档/表格/Base 内容(走 lark-doc / lark-sheets / lark-base)。"
|
|
5
5
|
metadata:
|
|
6
6
|
requires:
|
|
@@ -25,6 +25,7 @@ metadata:
|
|
|
25
25
|
## 快速决策
|
|
26
26
|
|
|
27
27
|
- 用户要**整理 / 盘点 / 归类 / 重构知识库、个人文档库、文档库目录或 Wiki 节点结构**,或要生成整理方案、目标目录树、移动计划时,不要只使用 Wiki 节点 API。必须先阅读 [`../lark-drive/references/lark-drive-workflow.md`](../lark-drive/references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`knowledge_organize`](../lark-drive/references/lark-drive-workflow-knowledge-organize.md) workflow;该 workflow 负责 Drive / Wiki / 个人文档库的统一入口解析、资源盘点、分类计划、写前确认和结果验证。
|
|
28
|
+
- 用户要把**已有 Wiki 节点移出知识库,放到 Drive 文件夹或“我的空间”根目录**:使用 `wiki +move-to-drive`,不要使用 `wiki +move` 或 `drive +move`。这是会改变节点归属和权限继承的写操作,执行前确认源节点与目标位置。
|
|
28
29
|
- 用户给的是知识库 URL(`.../wiki/<token>`),且后续要查成员/加成员/删成员:先调用 `lark-cli wiki spaces get_node --params '{"token":"<wiki_token>"}'` 获取 `space_id`,后续成员接口统一使用 `space_id`。
|
|
29
30
|
- 用户要**删除**知识空间(`wiki +delete-space`)但只给了名称或 URL:**不能**把名称 / URL 原样传给 `--space-id`,必须先解析出真实 `space_id`。解析方式:
|
|
30
31
|
- URL(`.../wiki/<token>`):`lark-cli wiki spaces get_node --params '{"token":"<wiki_token>"}' --format json`,读 `data.node.space_id`。
|
|
@@ -49,6 +50,7 @@ Shortcut 是对常用操作的高级封装(`lark-cli wiki +<verb> [flags]`)
|
|
|
49
50
|
| Shortcut | 说明 |
|
|
50
51
|
|----------|------|
|
|
51
52
|
| [`+move`](references/lark-wiki-move.md) | Move a wiki node, or move a Drive document into Wiki |
|
|
53
|
+
| [`+move-to-drive`](references/lark-wiki-move-to-drive.md) | Move a wiki node to a Drive folder and poll the async task |
|
|
52
54
|
| [`+node-create`](references/lark-wiki-node-create.md) | Create a wiki node with automatic space resolution |
|
|
53
55
|
| [`+delete-space`](references/lark-wiki-delete-space.md) | Delete a wiki space, polling the async delete task when needed |
|
|
54
56
|
| [`+space-list`](references/lark-wiki-space-list.md) | List all wiki spaces accessible to the caller |
|
|
@@ -76,7 +78,7 @@ Shortcut 是对常用操作的高级封装(`lark-cli wiki +<verb> [flags]`)
|
|
|
76
78
|
- `我的文档库` / `My Document Library` / `我的知识库` / `个人知识库` / `my_library` 都应视为 **Wiki personal library**,不是 Drive 根目录
|
|
77
79
|
- 处理这类目标时,先解析 `my_library` 对应的真实 `space_id`,再执行 `wiki +move`、`wiki +node-create` 或其他 Wiki 写操作
|
|
78
80
|
- 不要因为缺少显式 `space_id` 就退化成 `drive +move`
|
|
79
|
-
- 如果用户明确说的是 Drive
|
|
81
|
+
- 如果用户明确说的是 Drive 文件夹、云空间(云盘/云存储)根目录、`我的空间`,再按源对象分流:源对象是 Wiki 节点时用 `wiki +move-to-drive`,源对象已在 Drive 时用 `drive +move`
|
|
80
82
|
|
|
81
83
|
## API Resources
|
|
82
84
|
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# wiki +move-to-drive
|
|
2
|
+
|
|
3
|
+
> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
|
|
4
|
+
|
|
5
|
+
将已有 Wiki 节点移出知识库,并放到指定 Drive 文件夹;省略目标文件夹时放到当前调用身份的“我的空间”根目录。该操作始终创建异步任务,shortcut 会自动有限轮询。
|
|
6
|
+
|
|
7
|
+
## 何时使用
|
|
8
|
+
|
|
9
|
+
| 源对象 | 目标位置 | 命令 |
|
|
10
|
+
|--------|----------|------|
|
|
11
|
+
| Wiki 节点 | Wiki 空间或 Wiki 父节点 | `wiki +move` |
|
|
12
|
+
| Drive 文档 | Wiki 空间或 Wiki 父节点 | `wiki +move` |
|
|
13
|
+
| Wiki 节点 | Drive 文件夹或“我的空间”根目录 | `wiki +move-to-drive` |
|
|
14
|
+
| Drive 文件 / 文件夹 | Drive 文件夹或根目录 | `drive +move` |
|
|
15
|
+
|
|
16
|
+
`--node-token` 必须是 Wiki 节点 token,不是底层文档的 `obj_token`。无法判断时,先执行 `wiki +node-get --node-token <URL_OR_TOKEN>`。
|
|
17
|
+
|
|
18
|
+
## 命令
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# 移到指定 Drive 文件夹
|
|
22
|
+
lark-cli wiki +move-to-drive \
|
|
23
|
+
--node-token <WIKI_NODE_TOKEN> \
|
|
24
|
+
--folder-token <TARGET_FOLDER_TOKEN> \
|
|
25
|
+
--as user
|
|
26
|
+
|
|
27
|
+
# 移到当前调用身份的“我的空间”根目录
|
|
28
|
+
lark-cli wiki +move-to-drive \
|
|
29
|
+
--node-token <WIKI_NODE_TOKEN> \
|
|
30
|
+
--as user
|
|
31
|
+
|
|
32
|
+
# 预览提交任务和轮询任务两步请求
|
|
33
|
+
lark-cli wiki +move-to-drive \
|
|
34
|
+
--node-token <WIKI_NODE_TOKEN> \
|
|
35
|
+
--folder-token <TARGET_FOLDER_TOKEN> \
|
|
36
|
+
--dry-run
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 参数
|
|
40
|
+
|
|
41
|
+
| 参数 | 必填 | 说明 |
|
|
42
|
+
|------|------|------|
|
|
43
|
+
| `--node-token` | 是 | 要移出知识库的 Wiki 节点 token |
|
|
44
|
+
| `--folder-token` | 否 | 目标 Drive 文件夹 token;省略时移动到当前调用身份的“我的空间”根目录 |
|
|
45
|
+
|
|
46
|
+
## 异步协议与续跑
|
|
47
|
+
|
|
48
|
+
shortcut 会按以下协议执行:
|
|
49
|
+
|
|
50
|
+
1. `POST /open-apis/wiki/v2/nodes/{node_token}/move_wiki_to_docs`,取得完整、不可拆分的 `task_id`。
|
|
51
|
+
2. `GET /open-apis/wiki/v2/tasks/{task_id}?task_type=move_wiki_to_docs`。
|
|
52
|
+
3. 读取 `data.task.move_wiki_to_docs_result`:`status=1` 表示处理中,`status=0` 表示成功,`status=-1` 表示失败。
|
|
53
|
+
|
|
54
|
+
任务查询必须使用 `task_type=move_wiki_to_docs`、`move_wiki_to_docs_result` 和数值状态;不要回退到其他 task type、result 字段或字符串状态。
|
|
55
|
+
|
|
56
|
+
- 最多轮询 30 次,每次间隔 2 秒。
|
|
57
|
+
- 轮询窗口内成功时返回 `ready=true`,并尽可能返回 `obj_token`、`obj_type` 和 `url`。
|
|
58
|
+
- 仍在处理中时返回 `ready=false`、`timed_out=true`、完整 `task_id` 和 `next_command`;超时不代表任务失败。
|
|
59
|
+
- 任务进入失败态时返回结构化错误。
|
|
60
|
+
- `task_id` 是服务端签名的 opaque ID,可能包含多个连字符;必须原样保存,不能自行切分。
|
|
61
|
+
- 续跑必须保持和初始移动相同的 `--profile` 与 `--as user|bot` 身份,否则可能收到权限错误;shortcut 返回的 `next_command` 会保留两者。
|
|
62
|
+
|
|
63
|
+
手动续跑命令:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
lark-cli drive +task_result \
|
|
67
|
+
--scenario wiki_move_to_drive \
|
|
68
|
+
--task-id <COMPLETE_TASK_ID> \
|
|
69
|
+
--as user
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 典型返回
|
|
73
|
+
|
|
74
|
+
成功:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"node_token": "wikcnXXX",
|
|
79
|
+
"folder_token": "fldcnXXX",
|
|
80
|
+
"task_id": "<OPAQUE_TASK_ID>",
|
|
81
|
+
"ready": true,
|
|
82
|
+
"failed": false,
|
|
83
|
+
"status": 0,
|
|
84
|
+
"status_msg": "success",
|
|
85
|
+
"obj_token": "doxcnXXX",
|
|
86
|
+
"obj_type": "docx",
|
|
87
|
+
"url": "https://example.feishu.cn/docx/doxcnXXX"
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
轮询窗口超时:
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"node_token": "wikcnXXX",
|
|
96
|
+
"folder_token": "",
|
|
97
|
+
"task_id": "<OPAQUE_TASK_ID>",
|
|
98
|
+
"ready": false,
|
|
99
|
+
"failed": false,
|
|
100
|
+
"status": 1,
|
|
101
|
+
"status_msg": "processing",
|
|
102
|
+
"timed_out": true,
|
|
103
|
+
"next_command": "lark-cli drive +task_result --scenario wiki_move_to_drive --task-id <OPAQUE_TASK_ID> --as user"
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 权限与影响
|
|
108
|
+
|
|
109
|
+
- CLI 写操作预检查使用 `space:document:move`,任务轮询使用 `wiki:space:read`。
|
|
110
|
+
- 调用方必须能移动源 Wiki 节点并写入目标 Drive 文件夹。
|
|
111
|
+
- 成功后源节点会从 Wiki 树中消失,目标文档改用 Drive 目标位置的权限模型;原 Wiki 层级继承权限不再保留。
|
|
112
|
+
- 省略 `--folder-token` 时,“根目录”属于当前 `--as` 身份,user 与 bot 的可见资源范围可能不同。
|
|
113
|
+
|
|
114
|
+
> [!CAUTION]
|
|
115
|
+
> 这是会改变文档归属和权限继承的**写入操作**。执行前必须确认源 Wiki 节点、目标 Drive 位置和调用身份。
|
|
116
|
+
|
|
117
|
+
## 参考
|
|
118
|
+
|
|
119
|
+
- [lark-wiki](../SKILL.md) -- 知识库全部命令
|
|
120
|
+
- [wiki +move](lark-wiki-move.md) -- Wiki 内移动与 Drive 文档迁入 Wiki
|
|
121
|
+
- [drive +task_result](../../lark-drive/references/lark-drive-task-result.md) -- 超时后的任务续跑
|
|
122
|
+
- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数
|
|
@@ -9,18 +9,19 @@
|
|
|
9
9
|
|
|
10
10
|
当 `docs_to_wiki` 返回 `task_id` 时,shortcut 会先轮询一小段时间;如果轮询窗口内仍未完成,会返回 `next_command`,让调用方继续执行 `lark-cli drive +task_result --scenario wiki_move --task-id <TASK_ID>`。
|
|
11
11
|
|
|
12
|
-
## 与 `drive +move` 的区别
|
|
12
|
+
## 与 `wiki +move-to-drive` / `drive +move` 的区别
|
|
13
13
|
|
|
14
14
|
- `wiki +move` 的目标是 **知识空间或 Wiki 父节点**,使用 `--target-space-id` / `--target-parent-token`
|
|
15
|
+
- `wiki +move-to-drive` 把 **已有 Wiki 节点移出知识库,放入 Drive 文件夹或“我的空间”根目录**,使用 `--folder-token`
|
|
15
16
|
- `drive +move` 的目标是 **Drive 文件夹**,使用 `--folder-token`
|
|
16
|
-
- 如果源对象已经是 Wiki
|
|
17
|
+
- 如果源对象已经是 Wiki 节点:目标仍是 Wiki 时使用 `wiki +move`;目标是 Drive 文件夹或根目录时使用 `wiki +move-to-drive`
|
|
17
18
|
- 如果源对象还是 Drive 文档,但用户要“迁入知识库”“挂到某个 Wiki 页面下”,也应使用 `wiki +move`
|
|
18
19
|
- 如果用户只是想整理云空间(云盘/云存储)文件夹,把文件/文件夹挪到另一个 Drive 文件夹,应使用 `drive +move`
|
|
19
20
|
|
|
20
21
|
## 口语目标识别
|
|
21
22
|
|
|
22
23
|
- 当用户说“移动到某个知识库”“挂到某个页面下”“迁入 Wiki”时,按 **Wiki 目标** 处理,优先使用 `wiki +move`
|
|
23
|
-
- 当用户说“移动到某个文件夹”“移动到云空间(云盘/云存储)根目录”时,按 **Drive 文件夹目标**
|
|
24
|
+
- 当用户说“移动到某个文件夹”“移动到云空间(云盘/云存储)根目录”时,按 **Drive 文件夹目标** 处理;源对象是 Wiki 节点时使用 `wiki +move-to-drive`,源对象已在 Drive 时使用 `drive +move`
|
|
24
25
|
- 当用户说“移动到我的文档库”“移动到我的知识库”“放到个人知识库”时,应先按 **Wiki 个人知识库目标** 理解,而不是直接退化成 `drive +move`
|
|
25
26
|
- 遇到“我的文档库”这类表述时,可以把它理解成:先用 `my_library` 去查询用户个人知识库,再拿到真实 `space_id`
|
|
26
27
|
- 推荐做法是先执行 `lark-cli wiki spaces get --params '{"space_id":"my_library"}'`,取回真实知识库 `space_id`,再把这个 `space_id` 用到 `wiki +move`
|
|
@@ -180,4 +181,5 @@ CLI 会在执行前做本地 scope 预检查;当前 shortcut 声明的权限
|
|
|
180
181
|
|
|
181
182
|
- [lark-wiki](../SKILL.md) -- 知识库全部命令
|
|
182
183
|
- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数
|
|
184
|
+
- [wiki +move-to-drive](lark-wiki-move-to-drive.md) -- 将 Wiki 节点移出知识库并放入 Drive
|
|
183
185
|
- [drive +task_result](../../lark-drive/references/lark-drive-task-result.md) -- docs-to-wiki 异步任务的续跑查询命令
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
# 飞书表格核心操作:分析、编辑与可视化
|
|
2
|
-
|
|
3
|
-
## 概览
|
|
4
|
-
|
|
5
|
-
面向"已有飞书表格"的核心工作流,核心原则:**先了解,再分析或写入,最后验证**。本文是方法论总纲;具体工具的参数细节、边界陷阱在对应 reference,本文用指针引到那里,不重复展开。
|
|
6
|
-
|
|
7
|
-
**三份「通用方法与规范」如何分工**(都不含 shortcut,按主题单一归属):
|
|
8
|
-
|
|
9
|
-
- **本文(core-operations)= 流程与铁律**:端到端工作流 + 全局铁律 + 横切陷阱,是读取入口与枢纽。
|
|
10
|
-
- **`lark-sheets-visual-standards` = 样式知识**:配色 / 表头 / 数值格式 / 斑马纹 / 美化决策等"正确视觉输出"的全部标准。
|
|
11
|
-
- **`lark-sheets-formula-translation` = 公式知识**:飞书公式书写与 Excel 迁移的全部正确性规则(绝对引用、范围语法、数组语义、不支持函数等)。
|
|
12
|
-
|
|
13
|
-
> **下面的铁律对所有任务一律生效**,即使你是被索引直接路由进 visual 或 formula 而没经过本文——编辑类任务务必先回到这里过一遍铁律。
|
|
14
|
-
|
|
15
|
-
## 铁律(所有编辑类任务必须满足,各 reference 不得放宽)
|
|
16
|
-
|
|
17
|
-
1. **最小改动**:除用户明示要改的单元格 / 列外,原表其它单元格、行列结构、Sheet 名、合并区、格式必须 1:1 保持。中间结果优先放原数据**右侧**;会与原数据混淆或要承载透视表 / 图表时才**新建空白 Sheet**。**禁止**擅自删 / 改名 / 隐藏 / 移动**已存在**的 Sheet(新建允许,节制使用)。**改写 / 转换类任务要精确圈定适用行列**:只对任务真正要求的对象做变换,**不该转的行 / 列保持原值 1:1**(典型反例:要求"统一翻译"时把本就是中文、应原样保留的评论也重新翻译;要求"改写某列格式"时连原始测量值也一并改动 → 应保留的原文被篡改)。
|
|
18
|
-
2. **真实写回 + 回读校验**:交付必须是对在线表格的真实写入,并 `+csv-get` / `+cells-get` / `+<对象>-list` 回读校验。**严禁**只在文本里描述"已完成"、用普通公式 / 文本假装结构化对象、或只给占位而无真实写入。**收尾前必须确认产物文件真实存在 / 可导出**——别在没真正生成产物时只凭文本"已完成"就结束(反例:文本称已完成,实际没生成产物文件,等于没交付)。
|
|
19
|
-
3. **读全再写,禁止只探前 N 行**:批量填充 / 补齐 / 修正类任务必须先确认**真实数据末行**再写,否则会漏写表尾。完整的"按表格形态分流读取 + `current_region` / `has_more` 兜底 + 真实末行确认"流程见 `lark-sheets-read-data` 的「确定数据范围的正确流程」。
|
|
20
|
-
4. **公式优先于硬编码**:能用飞书公式表达的计算(总计 / 占比 / 增长率 / 提取 / 查找等)一律写公式而非静态值,源数据变化才能自动重算。用户口头的"分列 / 排序 / 求和 / 提取"也要落地为公式或原生工具(SORT / `TEXTBEFORE` / `MID` / 透视表 等)。Excel 公式迁移、数组语义、不支持函数清单一律以 `lark-sheets-formula-translation` 为唯一权威。**即使用户没说"联动 / 自动更新",凡是可由表内其它单元格推导的派生值(年龄=当年-出生年、占比=本类数/总数、达标=阈值判断、排名、各类分组汇总)默认就必须用公式**——用户默认期望派生列能随源数据重算,**离线 Python / 脚本算完写静态值,即便当前数值正确,改了源数据也不会自动更新,等于没满足"派生"的本意**(反例:年龄、月度汇总、占比、分组求和等派生列写死值,源数据一改结果就过时)。
|
|
21
|
-
5. **续写 / 扩展必须继承样式**:续写、补齐、复制区块、新增行列时,**禁止**只读值只写值。必须连带 `cell_styles` + `border_styles` + 合并 + 行高一起继承。完整继承清单与做法见 `lark-sheets-write-cells` 的「新增列 / 新增行的样式继承」(`border_styles` 四边最易漏)。
|
|
22
|
-
6. **多步写入优先 `+batch-update`**:多个连续写入、或同一工具对多个区域重复调用(多次 merge / resize / cells-set),必须合并为单次原子 `+batch-update`。语义与不可嵌套的限制见 `lark-sheets-batch-update`。
|
|
23
|
-
7. **分组汇总必须用透视表**:"按 X 统计 Y / 分组汇总 / 各部门数量金额"必须用 `+pivot-{create|update|delete}`(推荐省略 sheet_id 自动新建子表),**禁止**用 SUMIF / COUNTIF 或本地脚本覆盖原表替代。
|
|
24
|
-
8. **任务拆成可验证 checklist**:落地前把指令拆成所有"独立可验证子要点",每点一个 `assert`,全部通过才交付:多维度操作(按部门一/二/三级排序)每维一个 assert;多目标(删 N 行)每目标一个;多格式兼容(多种日期格式)每种至少一个样本;范围类(A1:H11 加边框)起 / 末行 / 末列三边界都核。只完成第一个要点(只排一级、只删 1 行)属违规。**题面 / 表头里写明的格式规范也是子要点**:表头注明"需标注某字段"就必须给对应单元格加规定前缀并逐条 assert 前缀存在(反例:漏加规定前缀,该要点即不达标);"相同编号连续行合并"必须遍历所有相同编号组全部合并(反例:只合并了其中一部分组)。
|
|
25
|
-
9. **全量处理要前置断言条数**:翻译 / 打标 / 批量公式落地等逐条任务,落地前把"预期处理条数"硬编码进代码,处理完 `assert actual == expected`。**严禁**输出"已完成前 N 条,剩余将继续"的半成品。
|
|
26
|
-
|
|
27
|
-
## 推荐工作流程
|
|
28
|
-
|
|
29
|
-
1. **规划 reference 清单**:开工前一次性列出本任务要读的 reference(避免读一个调一个),本轮已读过的不重复读。本文 + `lark-sheets-workbook` 几乎每次都要。
|
|
30
|
-
2. **了解结构**:先 `+workbook-info` 拿子表列表 / 行列数 / 冻结位置(不可猜测,猜错会越界覆盖);涉及合并 / 隐藏 / 分组 / 行高列宽再用 `lark-sheets-sheet-structure` 的 `+sheet-info`。
|
|
31
|
-
3. **读取数据(按任务类型选路径,细则见 `lark-sheets-read-data`)**:
|
|
32
|
-
|
|
33
|
-
| 用户需求语义 | 路径 |
|
|
34
|
-
|---|---|
|
|
35
|
-
| "完善 / 补齐 / 填空 / 修正所有 XX" / 数据分析 / 清洗 / 大数据集 | **A:原生优先**(公式 / `+pivot` / `+filter`,见第 5 步);原生表达不了或更复杂时**分批 `+csv-get` 导出 + 本地脚本处理 + 分批回写**(默认覆盖所有对应数据行,不以用户选区为准;脚本与 CLI 配合见下方「CLI 配合要点」) |
|
|
36
|
-
| "查一下 / 看看 / 统计 / 汇总" 等只读 | B:`+csv-get` 读到上下文 |
|
|
37
|
-
| 需要公式 / 样式 / 批注 | C:`+cells-get` |
|
|
38
|
-
| 续写 / 扩展 / 完善已有内容 | D:`+csv-get` 看结构 + `+cells-get` 读源区样式 + `+sheet-info --include row_heights,merges`(见铁律 5) |
|
|
39
|
-
|
|
40
|
-
**注意**:对"完善 / 补齐 / 填空"类任务用路径 B 探 10 行就写入,实测会漏写表尾多行。写入前必须按 `lark-sheets-read-data`「确定数据范围的正确流程」确认真实数据末行。按关键字定位区域用 `lark-sheets-search-replace` 的 `+cells-search`。
|
|
41
|
-
|
|
42
|
-
4. **理解数据语义(写入前必做)**:读表头 + 3-5 行样本确认各列含义与格式(文本 / 数字 / 日期 / 混合);写公式前先分析样本值格式模式再选提取策略;建透视表前先列清"行字段=分组维度、值字段=聚合指标"。需求模糊时(如"加入加减乘除"未说逻辑)基于表头与已有公式推断,不确定就问用户,禁止臆造业务逻辑。
|
|
43
|
-
|
|
44
|
-
5. **分析与计算(原生工具优先,代码兜底)**:飞书原生能力能随数据自动更新,**必须优先**:
|
|
45
|
-
|
|
46
|
-
| 用户需求 | 必须用的原生工具 | 禁止用代码替代 |
|
|
47
|
-
|---|---|---|
|
|
48
|
-
| 按 X 统计 Y、分组汇总 | `+pivot-{create\|update\|delete}` | pandas groupby → `+cells-set` |
|
|
49
|
-
| 求和 / 计数 / 平均 / 占比 | 公式(SUM/COUNT/AVERAGE) | Python 算 → 写静态值 |
|
|
50
|
-
| 画图表 / 可视化 | `+chart-{create\|update\|delete}` | matplotlib 画图 |
|
|
51
|
-
| 条件高亮 / 色阶 | `+cond-format-{create\|update\|delete}` | 逐单元格设样式 |
|
|
52
|
-
| 数据筛选 | `+filter-{create\|update\|delete}` | pandas filter → 覆盖写入 |
|
|
53
|
-
| 文本提取 / 转换 | 公式(REGEXEXTRACT/TEXT/VALUE) | Python 正则 → 写静态值 |
|
|
54
|
-
| 查找匹配 | 公式(VLOOKUP/INDEX+MATCH) | pandas merge → 写静态值 |
|
|
55
|
-
|
|
56
|
-
**只有以下才用代码**:多步清洗流水线、统计建模、公式试错 3 次仍失败的降级。代码结果回写:大块纯值用 `+csv-put`(+ `--start-cell`,必要时自动扩容);少量或需公式 / 样式用 `+cells-set`;能用飞书公式表达的写飞书公式。
|
|
57
|
-
|
|
58
|
-
6. **写入与修改(细节见 `lark-sheets-write-cells`)**:`+cells-set` 的 `range` 必须落在已有行列范围内、`cells` 二维数组与 `range` 严格同维;表尾追加先用 `+dim-insert` 插行列再写;整列 / 整行同结构的值 / 公式 / 格式用模板单元格 + `--copy-to-range`,禁止逐行 `+cells-set`;多步写入合并为 `+batch-update`;改尺寸先读相邻可见行列当前尺寸再决定 `pixel` / `standard` / `auto`,不要猜数值。
|
|
59
|
-
|
|
60
|
-
7. **验证**:重新读取受影响区域确认值 / 公式 / 样式 / 批注符合预期;对象类(图表 / 透视表 / 条件格式 / 筛选 / 迷你图 / 浮动图片)重新读对象配置确认;出错先定位错误类型 / 受影响区域 / 根因再修复重验。
|
|
61
|
-
|
|
62
|
-
## 用本地代码 / 脚本时的 CLI 配合要点
|
|
63
|
-
|
|
64
|
-
复杂处理——多步清洗、统计建模、批量转换、语义任务的分批编排等——用代码(`python` / `node` 等)解决是完全正当的。原生能力(公式 / `+pivot` / `+filter`)能表达就优先用(可随源数据自动重算);原生表达不了或逻辑更复杂时,放手用代码。下面几条让脚本与 CLI 顺畅配合:
|
|
65
|
-
|
|
66
|
-
- **解析输出时只读 stdout**:CLI 把数据 JSON 写到 stdout、把诊断与警告写到 stderr。解析 JSON 时**不要合并这两条流**(即不要 `2>&1`),否则警告行混进 JSON 会让解析失败。用管道(`lark-cli … | jq …`)或先把 stdout 单独重定向到文件再读;需要诊断信息时把 stderr 另导到一个文件。
|
|
67
|
-
- **喂给 CLI 的 CSV / JSON 用 UTF-8、不带 BOM**:BOM 会污染首格的值或触发 `invalid character` 解析错;脚本读写文件时显式指定 `encoding='utf-8'`。
|
|
68
|
-
- **临时文件交给运行时的标准库**:用 `tempfile.gettempdir()` / `os.tmpdir()` 等取临时目录,不要硬编码固定路径;放在用户项目目录之外。
|
|
69
|
-
- **命令失败先读错误再调整**:同一条命令失败后不要原样重发;先看 stderr 的报错(参数错误、缺依赖、解释器不可用等)定位原因,再决定换写法、补依赖或退回原生工具。
|
|
70
|
-
- **写回的必须是纯单元格值,禁止把"值+样式标注"串当值写回**:本地脚本或某些 xlsx 解析库会把单元格渲染成 `甲方支行(V-Align: bottom)` 这种"值(样式)"字符串,CSV 字段还可能带包裹双引号。回写前必须**剥离括号样式标注、去掉残留引号**,只写原始值——否则样式描述会变成单元格的字面文本污染原数据(反例:排序后单元格值里被写进 `(V-Align: bottom)` 这类样式后缀文本,末尾还多一个双引号)。**排序本身优先用 `+range-sort` 原生工具**,不要"读出来本地排完再整列写回",从根上避免这类回写污染。
|
|
71
|
-
|
|
72
|
-
## 公式策略
|
|
73
|
-
|
|
74
|
-
- **公式优先于硬编码**(同铁律 4):能用公式表达的计算一律写公式,源数据变化才能自动重算。
|
|
75
|
-
- **写任何公式前先读 `lark-sheets-formula-translation`**:它是公式正确性的唯一权威,覆盖绝对引用(`$`)、飞书范围语法(`H:H` 与工具 A1 表示法的区别)、ARRAYFORMULA / 数组语义、Excel 迁移、不支持函数清单等全部规则。本文不再单列这些细则。
|
|
76
|
-
|
|
77
|
-
## 常见陷阱(铁律已覆盖的不再重复,仅列易漏点)
|
|
78
|
-
|
|
79
|
-
- **合并单元格**:合并区只有左上角存数据,其余读为空是正常行为;写入只能写左上角,写其它位置会报 `cell ... is inside a merged region`。改合并区先取消再操作。安全操作 5 条与"批量取消用大 range 一次调用"见 `lark-sheets-range-operations`。
|
|
80
|
-
- **`+dim-insert` 不继承行高**:`--inherit-style before/after` 只继承值 / 公式 / 边框,不继承 `row_height`,新行会回落默认高度截断长文本;中间插行填文本前先读相邻行 `row_height`,用 `+batch-update` 合 `+rows-resize` 补齐。
|
|
81
|
-
- **公式容错**:日期 / 查找 / 数值转换公式用 `IFERROR` 包裹;写完读结果列首 5 + 末 5 行查 `#VALUE!` / `#NAME?` / `#REF!` / `#DIV/0!`;同一方案试错上限 3 次,超了改代码以值写入。
|
|
82
|
-
- **循环引用**:聚合公式(SUM/AVERAGE)引用范围不能含目标 cell 自身或其传递依赖。
|
|
83
|
-
- **NaN / 空值 / 除零**:空值不直接参与运算;除法用 `IF` / `IFERROR` 防零。
|
|
84
|
-
- **排序 / 筛选混合文本列**:带货币符 / 单位 / 表达式的文本列直接排序 / 筛选会按字典序出错,先抽数值到辅助列再处理(细则见 `lark-sheets-range-operations` / `lark-sheets-filter`)。
|
|
85
|
-
- **隐藏行列**:`+csv-get` 默认 `--skip-hidden=false`(含隐藏行列);设 `true` 只看可见数据,但返回行序号与实际行号不再对应。
|
|
86
|
-
- **行号一律取 `[row=N]` 前缀**:`+csv-get` 的 CSV 中双引号内换行是单元格内换行不是新行;禁止数 `\n`、禁止用"序号列"当行号(细则见 `lark-sheets-read-data`)。
|
|
87
|
-
- **列字母取 `col_indices[j]`**:禁止手数表头逗号定位列(>10 列极易 off-by-one)。
|
|
88
|
-
- **跨 sheet 对象**:图表 / 条件格式 / 透视表 / 浮动图片可能分布在多个子表,操作前先 `+workbook-info` 掌握全局。
|
|
89
|
-
- **`+cells-search` 不是万能**:用户说"汇总金额"是操作动作(求和),不是搜索该文本;只在确需定位某文本位置时才用。
|
|
90
|
-
|
|
91
|
-
## 特殊场景
|
|
92
|
-
|
|
93
|
-
### 续写 / 复制已有区块格式
|
|
94
|
-
|
|
95
|
-
核心要求见铁律 5。机制(带齐哪些样式字段、怎么采样写入)见 `lark-sheets-write-cells` 的「新增列 / 新增行的样式继承」;样式标准(斑马纹奇偶 / 配色 / 边框层级)见 `lark-sheets-visual-standards` 场景二。本文不再展开。
|
|
96
|
-
|
|
97
|
-
### NLP 任务处理
|
|
98
|
-
|
|
99
|
-
任务涉及语义理解、翻译、改写、摘要、分类、抽取、多行聚合时,以 NLP 方式处理,不要用纯规则代码替代语义理解(但可用代码做分批、行号映射、结果拼装与写回)。数据量大时**必须**分批(通常 30 行一批),每批处理完立即写回,不要全处理完再一次写入;单批生成通常不超 300 行,超出时按性质抽样或分批并向用户说明范围;多批写入优先用 `+batch-update` 合并为原子提交。
|
|
100
|
-
|
|
101
|
-
### 格式处理优先公式
|
|
102
|
-
|
|
103
|
-
"去除多余零 / 提取数字 / 文本格式转换 / 日期格式化"等清洗,**必须优先用公式**(`SUBSTITUTE` / `TEXT` / `VALUE` / `LEFT` / `RIGHT` / `MID` 等):写一个模板 + `--copy-to-range` 即可整列处理,远比逐行修改高效。
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
# lark-slides xml_presentation.slide create
|
|
2
|
-
|
|
3
|
-
## 用途
|
|
4
|
-
|
|
5
|
-
在指定的 XML 演示文稿中创建新的幻灯片页面,通常用于给 `slides +create` 创建出的空白 PPT 逐页补充内容。
|
|
6
|
-
|
|
7
|
-
## 命令
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
lark-cli slides xml_presentation.slide create --as user --params '<json_params>' --data '<json_data>'
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## 参数说明
|
|
14
|
-
|
|
15
|
-
| 参数 | 类型 | 必需 | 说明 |
|
|
16
|
-
|------|------|------|------|
|
|
17
|
-
| `--params` | JSON string | 是 | 路径参数与查询参数 |
|
|
18
|
-
| `--data` | JSON string | 是 | 请求体,包含新页面内容 |
|
|
19
|
-
|
|
20
|
-
### params JSON 结构
|
|
21
|
-
|
|
22
|
-
```json
|
|
23
|
-
{
|
|
24
|
-
"xml_presentation_id": "slides_example_presentation_id",
|
|
25
|
-
"revision_id": -1,
|
|
26
|
-
"tid": "idMock"
|
|
27
|
-
}
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
| 字段 | 类型 | 必需 | 说明 |
|
|
31
|
-
|------|------|------|------|
|
|
32
|
-
| `xml_presentation_id` | string | 是 | 目标演示文稿的唯一标识符 |
|
|
33
|
-
| `revision_id` | integer | 否 | 演示文稿版本号,`-1` 表示最新版本 |
|
|
34
|
-
| `tid` | string | 否 | 锁的事务 ID |
|
|
35
|
-
|
|
36
|
-
### data JSON 结构
|
|
37
|
-
|
|
38
|
-
```json
|
|
39
|
-
{
|
|
40
|
-
"slide": {
|
|
41
|
-
"slide_id": "slide_example_id",
|
|
42
|
-
"content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\">...</slide>"
|
|
43
|
-
},
|
|
44
|
-
"before_slide_id": "slide_before_target"
|
|
45
|
-
}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
| 字段 | 类型 | 必需 | 说明 |
|
|
49
|
-
|------|------|------|------|
|
|
50
|
-
| `slide.slide_id` | string | 否 | 幻灯片页面 short ID |
|
|
51
|
-
| `slide.content` | string | 否 | 新幻灯片的 XML 内容 |
|
|
52
|
-
| `before_slide_id` | string | 否 | 插入到指定页面之前 |
|
|
53
|
-
|
|
54
|
-
## slide XML 结构
|
|
55
|
-
|
|
56
|
-
`slide.content` 是一个完整的 `<slide>` 元素,遵循 SML 2.0 Schema:
|
|
57
|
-
|
|
58
|
-
```xml
|
|
59
|
-
<slide xmlns="http://www.larkoffice.com/sml/2.0">
|
|
60
|
-
<data>
|
|
61
|
-
<shape type="text" topLeftX="80" topLeftY="80" width="800" height="120">
|
|
62
|
-
<content textType="title">
|
|
63
|
-
<p>标题</p>
|
|
64
|
-
</content>
|
|
65
|
-
</shape>
|
|
66
|
-
</data>
|
|
67
|
-
</slide>
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
详细格式请参考 [xml-format-guide.md](xml-format-guide.md) 和 [xml-schema-quick-ref.md](xml-schema-quick-ref.md)。
|
|
71
|
-
|
|
72
|
-
## 使用示例
|
|
73
|
-
|
|
74
|
-
### 在末尾添加幻灯片
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
lark-cli slides xml_presentation.slide create --as user --params '{
|
|
78
|
-
"xml_presentation_id": "slides_example_presentation_id"
|
|
79
|
-
}' --data '{
|
|
80
|
-
"slide": {
|
|
81
|
-
"content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data><shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>新页面标题</p></content></shape><shape type=\"text\" topLeftX=\"80\" topLeftY=\"200\" width=\"800\" height=\"180\"><content textType=\"body\"><p>内容文本</p></content></shape></data></slide>"
|
|
82
|
-
}
|
|
83
|
-
}'
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### 在指定页面前插入幻灯片
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
lark-cli slides xml_presentation.slide create --as user --params '{
|
|
90
|
-
"xml_presentation_id": "slides_example_presentation_id"
|
|
91
|
-
}' --data '{
|
|
92
|
-
"slide": {
|
|
93
|
-
"content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data><shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>插入的标题页</p></content></shape></data></slide>"
|
|
94
|
-
},
|
|
95
|
-
"before_slide_id": "slide_before_target"
|
|
96
|
-
}'
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### 带图形元素的幻灯片
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
lark-cli slides xml_presentation.slide create --as user --params '{
|
|
103
|
-
"xml_presentation_id": "slides_example_presentation_id"
|
|
104
|
-
}' --data '{
|
|
105
|
-
"slide": {
|
|
106
|
-
"content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data><shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"520\" height=\"120\"><content textType=\"title\"><p>数据展示</p></content></shape><shape type=\"rect\" topLeftX=\"700\" topLeftY=\"100\" width=\"200\" height=\"150\"><fill><fillColor color=\"rgb(100, 149, 237)\"/></fill></shape></data></slide>"
|
|
107
|
-
}
|
|
108
|
-
}'
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### 从文件读取 XML
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
# 先创建 slide.xml 文件
|
|
115
|
-
cat > slide.xml << 'EOF'
|
|
116
|
-
<slide xmlns="http://www.larkoffice.com/sml/2.0">
|
|
117
|
-
<data>
|
|
118
|
-
<shape type="text" topLeftX="80" topLeftY="80" width="800" height="120">
|
|
119
|
-
<content textType="title">
|
|
120
|
-
<p>从文件加载</p>
|
|
121
|
-
</content>
|
|
122
|
-
</shape>
|
|
123
|
-
<shape type="text" topLeftX="80" topLeftY="200" width="800" height="180">
|
|
124
|
-
<content textType="body">
|
|
125
|
-
<p>这是从文件读取的幻灯片内容</p>
|
|
126
|
-
</content>
|
|
127
|
-
</shape>
|
|
128
|
-
</data>
|
|
129
|
-
</slide>
|
|
130
|
-
EOF
|
|
131
|
-
|
|
132
|
-
# 然后创建幻灯片
|
|
133
|
-
lark-cli slides xml_presentation.slide create --as user \
|
|
134
|
-
--params '{"xml_presentation_id":"slides_example_presentation_id"}' \
|
|
135
|
-
--data "$(jq -n --arg content "$(cat slide.xml)" '{slide:{content:$content}}')"
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
## 返回值
|
|
139
|
-
|
|
140
|
-
成功时返回创建的幻灯片信息:
|
|
141
|
-
|
|
142
|
-
```json
|
|
143
|
-
{
|
|
144
|
-
"code": 0,
|
|
145
|
-
"data": {
|
|
146
|
-
"slide_id": "slide_example_id",
|
|
147
|
-
"revision_id": 100
|
|
148
|
-
},
|
|
149
|
-
"msg": "success"
|
|
150
|
-
}
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### 返回字段说明
|
|
154
|
-
|
|
155
|
-
| 字段 | 类型 | 说明 |
|
|
156
|
-
|------|------|------|
|
|
157
|
-
| `data.slide_id` | string | 新幻灯片的唯一标识 |
|
|
158
|
-
| `data.revision_id` | integer | 演示文稿最新版本号 |
|
|
159
|
-
|
|
160
|
-
## slide 元素可用子元素
|
|
161
|
-
|
|
162
|
-
| 元素 | 说明 |
|
|
163
|
-
|------|------|
|
|
164
|
-
| `<style>` | 页面样式(背景填充) |
|
|
165
|
-
| `<data>` | 图形元素容器(shape、img、table、chart、whiteboard 等) |
|
|
166
|
-
| `<note>` | 演讲者备注 |
|
|
167
|
-
|
|
168
|
-
> [!IMPORTANT]
|
|
169
|
-
> **本地图片必须先上传**:`xml_presentation.slide.create` 不识别 `@./local.png` 占位符(那是 `+create --slides` 的语法糖)。直接调本接口添加带图新页时,必须先用 [`slides +media-upload`](lark-slides-media-upload.md) 拿到 `file_token`,再写进 `<img src="<file_token>">`。
|
|
170
|
-
>
|
|
171
|
-
> 如果是从零开始建带图 PPT,**强烈建议改用 [`slides +create --slides '[...]'`](lark-slides-create.md#本地图片path-占位符)** 一步搞定(自动上传 + 替换 token)。
|
|
172
|
-
|
|
173
|
-
## 常见错误
|
|
174
|
-
|
|
175
|
-
| 错误码 | 含义 | 解决方案 |
|
|
176
|
-
|--------|------|----------|
|
|
177
|
-
| 404 | 演示文稿不存在 | 检查 `xml_presentation_id` 是否正确 |
|
|
178
|
-
| 400 | XML 格式错误 | 检查 `slide.content` 是否是完整 `<slide>` 元素 |
|
|
179
|
-
| 400 | 请求体结构错误 | 检查是否按 `slide.content` 和 `before_slide_id` 包装 |
|
|
180
|
-
| 403 | 权限不足 | 检查是否拥有 `slides:presentation:update` 或 `slides:presentation:write_only` scope |
|
|
181
|
-
| 3350001 | XML 非 well-formed 或服务端参数校验失败 | 优先检查未转义字符:文本 `Q&A -> Q&A`,文本 `<` / `>` 写成 `<` / `>`,属性 URL `a=1&b=2 -> a=1&b=2` |
|
|
182
|
-
|
|
183
|
-
## 注意事项
|
|
184
|
-
|
|
185
|
-
1. **执行前必做**: 使用 `lark-cli schema slides.xml_presentation.slide.create` 查看最新的参数结构
|
|
186
|
-
2. **slide.content 格式**: 必须是完整的 `<slide>` 元素,不是整个 presentation
|
|
187
|
-
3. **命名空间建议**: 协议标准写法应带 `xmlns`,例如 `<slide xmlns="http://www.larkoffice.com/sml/2.0">`;当前服务端实现可能兼容不带 `xmlns` 的输入,但不作为协议保证
|
|
188
|
-
4. **fill / border 写法**: 颜色填充使用 `<fill><fillColor color="..."/></fill>`,边框常用 `<border color="..." width="2"/>`
|
|
189
|
-
5. **插入位置**: 通过 `before_slide_id` 指定插入目标,而不是用 `position`
|
|
190
|
-
6. **JSON 转义**: 如果直接内联 XML,需要正确转义双引号
|
|
191
|
-
7. **建议**: 先使用 `xml_presentations.get` 获取现有结构,再添加新页面
|
|
192
|
-
|
|
193
|
-
## 批量添加建议
|
|
194
|
-
|
|
195
|
-
如果需要添加多张幻灯片,建议先明确每一页的 `before_slide_id`,或直接按最终顺序逐页追加:
|
|
196
|
-
|
|
197
|
-
```bash
|
|
198
|
-
#!/bin/bash
|
|
199
|
-
|
|
200
|
-
PRESENTATION_ID="slides_example_presentation_id"
|
|
201
|
-
|
|
202
|
-
declare -a slides=(
|
|
203
|
-
'<slide xmlns="http://www.larkoffice.com/sml/2.0"><data><shape type="text" topLeftX="80" topLeftY="80" width="800" height="120"><content textType="title"><p>页面 1</p></content></shape></data></slide>'
|
|
204
|
-
'<slide xmlns="http://www.larkoffice.com/sml/2.0"><data><shape type="text" topLeftX="80" topLeftY="80" width="800" height="120"><content textType="title"><p>页面 2</p></content></shape></data></slide>'
|
|
205
|
-
'<slide xmlns="http://www.larkoffice.com/sml/2.0"><data><shape type="text" topLeftX="80" topLeftY="80" width="800" height="120"><content textType="title"><p>页面 3</p></content></shape></data></slide>'
|
|
206
|
-
)
|
|
207
|
-
|
|
208
|
-
for slide_xml in "${slides[@]}"; do
|
|
209
|
-
payload=$(jq -n --arg content "$slide_xml" '{slide:{content:$content}}')
|
|
210
|
-
lark-cli slides xml_presentation.slide create --as user --params "{\"xml_presentation_id\":\"$PRESENTATION_ID\"}" --data "$payload"
|
|
211
|
-
done
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
## 相关命令
|
|
215
|
-
|
|
216
|
-
- [slides +create](lark-slides-create.md) - 创建空白 PPT
|
|
217
|
-
- [xml_presentations get](lark-slides-xml-presentations-get.md) - 读取 PPT 内容
|
|
218
|
-
- [xml_presentation.slide delete](lark-slides-xml-presentation-slide-delete.md) - 删除幻灯片页面
|
|
219
|
-
- [xml-format-guide.md](xml-format-guide.md) - XML 格式详细规范
|
|
220
|
-
- [xml-schema-quick-ref.md](xml-schema-quick-ref.md) - Schema 快速参考
|