Files
2026-09-02 11:44:52 +08:00

15 KiB
Raw Permalink Blame History

电子表格(Sheet

本文件是 Sheet 常见任务的唯一必读 reference,已经覆盖创建、定位、读写、验证、导出和清理。复杂任务按执行阶段加载精确子 reference:每个阶段最多一份,真正进入下一阶段时才允许继续加载;不要批量预读 sheet/dingtalk-shared 或 Drive 文档。

最小 DWS 执行契约

  • 只通过 dws CLI 操作钉钉;结构化读取使用 --format json,按真实返回判断结果。
  • 已知命令直接执行。只有 leaf 参数或安全语义不确定时读取精确 Schema,只有 Cobra flag 不确定时读取精确 leaf Help;不要加载产品级 Catalog 代替选路。
  • 不猜命令、flag、字段、ID、账号或时间。后续 ID 必须来自真实返回;零命中、多候选或类型不明时停止并消歧。
  • 解析目标、读取上下文和最终执行必须使用同一 profile;不得跨组织复用 userId、openDingTalkId 或 openConversationId。多账号组织只使用明确的 isOrgCurrent=true 默认账号;没有默认账号时要求用户指定,禁止选择第一项、最近登录或最近使用账号。
  • 不输出或记录 token、refresh token、appSecret、webhook token 等凭据;宿主已注入认证时不要索要凭据。
  • 写操作必须符合用户明确意图。是否需要确认以最终 Runtime gate 和 Schema 为准;需要确认时先说明对象、动作与影响,再追加 --yes
  • 写后按任务结果契约验证;不能仅凭退出码宣称成功。部分结果、未知投递状态和失败项必须如实保留。
  • 时间戳面向用户展示时转换为带时区的可读时间;默认使用当前会话时区,必要时同时保留原值。
  • 遇到认证、权限、profile、confirmation 或未知错误时,只加载 dingtalk-shared 中对应 reference;不要连续猜测替代命令。

Sheet 操作先读必要范围、做最小修改,再用匹配读命令回读;已有原生命令时不要用本地脚本或多次客户端读写模拟。

产品边界

用户或资源 路由
明确说“在线电子表格/工作表/单元格/A1/公式/图表/透视表/版本” dws sheet,即使用户同时说“结构化整理”“表头”“记录”也不要改走 AITable
明确说 Base/多维表/字段类型/记录视图,且没有 Sheet 原生操作 dws aitable
在线富文本文档 dws doc
本地 xlsx/xls,用户要转换为在线表格 dws sheet import create;当前只支持 xlsx/xls
Drive 中的 xlsx/xls,用户要转换为在线表格 先用 dws drive download 下载到本地相对路径,再执行 dws sheet import create;不要把二进制节点传给工作表命令
只做本地分析,或文件是 xlsm/csv 留在本地处理;当前 sheet import 不支持 xlsm/csv

sheet 仅支持在线电子表格(contentType=ALIDOCextension=axls)。只有用户给出未知类型 URL/ID 时才调用一次 dws drive info --node <URL_OR_ID> --format json 探测;刚由 sheet create 返回的资源无需再次 probe。spreadsheetv2 URL 原样传入 --node,不要截短。

只有运行时仍无法识别 URL 形态时才按需查看 链接规范;只有上表无法判定的低频产品歧义才查看 局部意图消歧。这两份都不是冷启动必读项。

常用闭环

1. 创建

目标 命令
只建空表格 dws sheet create --name <NAME> --format json
新建并写入初始二维数据 dws sheet create-with-data --name <NAME> --values '<2D_JSON>' --format json
新建多个 typed 工作表 dws sheet create-with-data --name <NAME> --sheets '<SPECS_JSON>' --format json
浏览当前可用模板 dws sheet template list --format json
按关键词搜索模板 dws sheet template search --query <TEXT> --format json
用模板创建在线表格 dws sheet template apply --template-id <TEMPLATE_ID> --name <NAME> --format json

有初始数据时优先 create-with-data,它会创建、定位默认工作表、写入并读回,减少独立调用。空表才用 create。后续始终复用返回的真实 nodeId;不要从 URL 文本或历史会话猜 ID。

模板意图先用 listsearch 取得唯一的真实 templateId;零个或多个候选时停止并消歧,不能把模板名称猜成 ID。apply 会新建在线表格,后续复用其返回的节点信息;不要再执行一次普通 sheet create

2. 定位工作表

  • 后续命令不要求 sheet-id 时不要为了“保险”调用 list
  • 需要 sheet-id 且当前结果没有返回时,用 dws sheet +list-sheets --node <NODE_ID> --format json;按完整标题唯一匹配,不猜 Sheet10default
  • 合并、冻结、行列尺寸/隐藏/分组等结构信息用 dws sheet info --node <NODE_ID> --sheet-id <SHEET_ID> --format json,不要从 CSV 空值推断。

3. 读写选择

目标 首选命令 说明
Agent 快速读值 dws sheet csv-get --node <NODE_ID> --sheet-id <SHEET_ID> --range <A1> --format json token 最低;关注 hasMorereturnedRangetruncationReasons
严格完整读取范围 dws sheet +read --node <NODE_ID> --sheet-id <SHEET_ID> --range <A1> --format json 截断失败关闭
typed table/dataframe dws sheet table-get / table-put 用于 columns/data/dtypes/formats;不塞进 batch-update
少量值、富文本、链接、数据验证 dws sheet range update --node <NODE_ID> --sheet-id <SHEET_ID> --range <A1> --values '<2D_JSON>' --format json --values 维度必须与范围一致
超过 5 行或 20 单元格的纯值/公式 dws sheet csv-put --node <NODE_ID> --sheet-id <SHEET_ID> --start-cell A1 --csv - --format json stdin 优先;覆盖已有数据时显式 --allow-overwrite
末尾追加记录 dws sheet append --node <NODE_ID> --sheet-id <SHEET_ID> --values '<2D_JSON>' --format json 不手算最后一行

长数字 ID、订单号、手机号及超过 9007199254740991 的整数按文本写入,避免 JSON number 精度损失。公式以 = 开头;需要字面量 = 时前加单引号。

4. 最小验证

  • 值写入:只回读受影响范围,优先 csv-get;需要公式文本用 --value-render-option formula,需要真实计算值用 raw_value
  • 公式任务:写后先确认公式文本,再执行 formula-verify;只有 status=successhasMore=falsetotalErrors=0 才能说目标范围未发现公式错误,这仍不等于业务数值一定正确。
  • 结构修改:用 sheet info 或对应对象 list/get;图表、透视表、筛选、评论、条件格式等不能只凭写响应断言完成。
  • 多个相互依赖的修改尽量使用服务端原子 batch-update;不支持的对象按依赖顺序执行,并在最后合并验证,避免每一步都全表回读。

5. 本地交付与清理

用户要的文件 正确命令 不要做
单个工作表的纯 RFC4180 CSV dws sheet export-csv --node <NODE_ID> --sheet-id <SHEET_ID> --output ./data.csv 不要给 sheet export--format csv;不要把带 [row=N]csv-get 输出冒充纯 CSV
整个工作簿 xlsx dws sheet export --node <NODE_ID> --output ./result.xlsx 不要自行重复提交或轮询导出任务
只供 Agent 阅读 dws sheet csv-get ... 不需要落盘

export-csv 默认遇到截断就失败且不覆盖已有文件;只有用户明确接受不完整 CSV 时才加 --allow-truncated。先根据命令回执确认目标文件成功落盘且非空,再做清理。

清理不是 finally:只有导出命令成功,且已验证本地文件存在、非空、可交付后,才进入清理步骤。导出失败或本地文件不可验证时保留在线节点并报告失败。

用户要求清理时,只能针对本任务创建且 ID 已确认的在线节点。是否需要确认以 drive +delete 的 Runtime gate/Schema 为准;需要确认时先向用户说明节点、动作和不可见影响,取得明确确认后,才在下面这条已核对命令上追加 --yes

dws drive +delete --node <NODE_ID> --format json

不要把原请求中的“导出后删除”自动等同于 Runtime 确认,也不要在存储示例中预置 --yes。命令和参数已明确时无需读取 Drive reference 或 Help;只有安全语义仍不确定时读取一次该 leaf 的 compact Schema。

Shortcuts(无专用脚本/recipe 时优先)

以下 shortcut 同时进入公开 catalog 与 Runtime Schema。先按本 skill 的意图表、脚本和 recipe 路由:存在精确覆盖该场景的专用脚本/recipe 时按其执行;否则用户意图命中时,shortcut 优先于手写原子命令。命令已选中时直接执行;只在参数或安全语义不确定时读取 Agent leaf Schema(例如 dws schema --cli-path "sheet +<shortcut>" --compact --format json),在当前 Cobra flags 不确定时读取 dws sheet <shortcut> --help。只有参数映射、接口绑定或 provenance 审计才省略 --compact。仅当现有路由和 reference 都无法定位低频能力时,才用 dws shortcut list --service sheet --format json 批量发现。

Shortcut 风险 适用场景
dws sheet +list-sheets read 严格列出在线电子表格的工作表,并可按完整标题精确筛选
dws sheet +read read 完整读取并严格校验在线电子表格范围;截断结果失败关闭

复杂操作:按阶段加载 reference

先用本文件完成路由。只有执行即将进入一个复杂阶段时,才读取该阶段对应的一份子 reference;完成阶段后保留 nodeIdsheetId、对象 ID、已验证范围和 revision,再进入下一阶段。一个任务可以顺序读取多份,但禁止冷启动并行预读、重复读取已经加载的文件,或因“可能用到”提前加载。常规任务最多三个复杂阶段;超过时应先合并同类操作并复用已加载契约。

当前执行阶段 本阶段唯一子 reference 原生命令族
浏览、搜索或应用模板 本文件创建闭环(无需子 reference) template list/search/apply
工作表增删改、冻结、合并边界、网格线 sheet-workbook new / update / copy / delete-sheet / info
读取元数据、分页、大范围值 sheet-read-data csv-get / table-get / range read
富格式值、超链接、数据验证、typed 写入 sheet-write-data range update / csv-put / table-put / append
公式写入、文本回读、错误扫描 sheet-formula range update / formula-verify
查找或替换 sheet-search-replace find / replace
清空、排序、填充、复制/移动区域 sheet-range-operations range clear/sort/fill/copy-to/move-to
多个原子写组合 sheet-batch-operations batch-update / range batch-clear
行列插删、尺寸、隐藏、移动、分组 sheet-dimension-operations dimension 命令族
样式、数字格式、合并 sheet-style-format range set-style / merge-cells
下拉选项 sheet-dropdown dropdown 命令族
筛选 sheet-filter filter 命令族
个人筛选视图 sheet-filter-view filter-view 命令族
条件高亮、色阶、数据条 sheet-conditional-format cond-format 命令族
图表 sheet-chart chart 命令族
透视表 sheet-pivot-table pivot-table 命令族
评论、回复、更新、删除评论 sheet-comment comment 命令族
图片与附件 sheet-media-image write-image / float-image 命令族
在线历史版本保存、列表、恢复 sheet-version version save/list/revert
当前 revision 与编辑审计 sheet-revision-changeset revision-get / changeset-get
导入或导出边界/失败恢复 sheet-exportsheet-import 中与意图匹配的一份 export / export-csv / import create/get

例如“写公式 → 设置样式 → 创建图表”可在进入三个阶段时依次加载 sheet-formulasheet-style-formatsheet-chart,但每一阶段只读一份,且下一份必须等上一阶段写入/验证完成后再读。若当前 reference 已能完成后续动作,不再加载;契约错误恢复仍只补读与报错 leaf 精确对应的一份。

版本与 revision 边界

  • 在线 Sheet 历史版本只用 dws sheet version save/list/revert。恢复是破坏性操作,必须确认精确目标版本;不要用 Doc 的 version 命令。
  • revision-get / changeset-get 是编辑审计和前向语义变化,不是可恢复的历史快照,也不保证是当前最终值。
  • 不要用 AITable schema snapshot 冒充 Sheet 历史版本。用户明确要求在线电子表格版本时,产品边界优先于“结构化”措辞。
  • 恢复或审计后仍需回读当前目标范围;changeset 不能代替最终值。

完成检查

在最终答复前只做一次紧凑检查:

  • 资源类型和 profile 正确,所有 ID 来自本任务真实返回。
  • 创建/修改、对象存在性与关键值已有匹配读回;公式没有被普通值回读误判。
  • 用户要求的本地 CSV/xlsx 已成功导出,格式与扩展名一致。
  • 若要求清理,本任务创建的精确在线节点已移入回收站;本地交付物仍保留。
  • 最终答复附上真实在线链接或本地路径,只报告证据支持的行数、对象数、公式状态和清理状态。

最短错误恢复

  • 参数校验失败:只修正错误指出的 leaf 参数后重试一次;不要改读父级 Help。
  • hasMore=true / 截断:按 returnedRange 分块续读;不得把部分结果声称为完整。CSV 落盘默认失败关闭。
  • 导出 xlsx 失败或超时:不要重复提交 sheet export;保留在线文档并报告。
  • create-with-data 在 create / write / style 间不是原子事务。若错误 details.statusunknownpartial_success,复用 details.nodeId / details.sheetId 读回现状,只补失败步骤;不得整体重跑 create-with-data,也不得自动删除已写数据。
  • 写入部分成功:先读回确定真实状态,再续做缺失部分;不要盲目重放非幂等创建。
  • 权限或认证失败:停止业务重试并报告;不要切换产品绕过权限。