Files
EP-Hub-Skill/.agents/skills/dingtalk-misc/references/sheet/sheet-batch-operations.md
T
2026-09-02 11:44:52 +08:00

3.9 KiB
Raw Blame History

Sheet 批量原子操作

使用边界

batch-update 用于多个相互依赖且已确认参数的原子写;range batch-clear 用于跨工作表批量清空。不要把独立命令能完成的一次写拆成 batch,也不要为了减少调用把不相关风险混在一起。

当前 batch-update 只支持以下精确 toolNamerange clearrange updatemerge-cellsunmerge-cellsrange fillrange copy-toadd-dimensiondelete-dimensionmove-dimensionupdate-dimensiongroup-dimensionungroup-dimensionset-dropdowndelete-dropdowncsv-putdelete-float-image

以下不进入 batch-updateset-style/batch-set-style、table-put/table-get、range read/csv-get、对象 create/update/list、嵌套 batch、需要立即折叠的 group-dimension。样式批量使用独立 range batch-set-style;结构化 table 独立写并独立回读;折叠分组用独立 group-dimension --group-state fold。不要把相似的 CLI leaf 名称猜成受支持 toolName。

批量清空

dws sheet range batch-clear       --node <NODE_ID>       --ranges '["Sheet1!A1:B3","Sheet2!C1:D5"]'       --type content --format json

每个范围必须带工作表前缀。type 为 content、format 或 allall 会同时删除值和格式,属于高风险操作。执行前读最小范围并展示目标,获得明确确认后才执行破坏性清空。默认原子:任一区域失败整批回滚。

batch-update 结构

dws sheet batch-update --node <NODE_ID> --operations '[
  {"toolName":"range clear","input":{"sheet-id":"Sheet1","range":"A1:B3","type":"content"}},
  {"toolName":"range update","input":{"sheet-id":"Sheet1","range":"A1","values":[[{"type":"text","text":"hello"}]]}},
  {"toolName":"merge-cells","input":{"sheet-id":"Sheet1","range":"A1:B1","merge-type":"mergeAll"}}
]' --format json

每项形如 {"toolName": "...", "input": {...}}

  • toolName 必须逐字取上面的支持清单,不接受 MCP RPC 名或缩写。
  • input 键使用 CLI flag 名去掉 --,例如 sheet-id、start-index、merge-type。
  • node 只在批次顶层传,不在子操作中重复。
  • 子操作按数组顺序执行;依赖前项产生的新 ID 的对象不适合放进同一静态批次。
  • 不确定某个 leaf 的字段时只读该 leaf compact Schema,不读取所有 Help。

set-dropdown 的 batch input 仍遵循精确互斥:inline 用 options(颜色只能写 options[].color);SourceRange 用 source-sheet-id 与 source-range 且二者必须同时出现。options 与 source-range 必须且只能选一个;顶层 colors/source-colors 不支持,SourceRange 颜色也不支持。

默认不加 --continue-on-error,这样任一失败整批回滚。只有用户明确接受部分成功时才加;此时顶层请求可能成功但子项仍有失败,必须按输入索引逐项解析状态、错误和实际结果,失败项不能被成功项掩盖。

预检与安全

批次发送前检查:所有 sheetId 来自当前任务;范围无意外重叠;操作顺序满足依赖;删除/清空/移动影响已确认;预计操作数与数组长度一致。不要用 validate 成功替代真实执行,也不要在失败后盲目重发整批。

超时或响应不确定时先回读目标状态:

  • 原子模式:判断整批是否已落地,再决定是否重试。
  • continue-on-error:只为已证明缺失且可安全重试的项目构造新批次。
  • 非幂等操作如 append、insert、move 未确认状态前禁止重放。

写后验证

批次成功后按结果类型合并验证,避免逐操作全表读取:

  • 值:一次读取覆盖所有受影响值的最小范围;
  • 样式/合并/行列:info 或样式读取;
  • dropdown/对象:对应 list/get。

预期条数、结果条数或关键状态不一致即失败。只读校验可做有界退避;不得通过重复写“碰碰运气”。最终说明原子/部分模式、成功项、失败项和已验证范围。