您的方案可以通过多个步骤解决。
第 1 步:创建 webhook
您的场景的第一个方面是:当新行添加到指定工作表时,您的应用需要自动通知。为此,您需要创建一个webhook,当指定工作表中发生事件时,它将向您的应用发送回调通知。
您的应用收到的通知将包含Callback object。您需要评估 Callback 对象的 events 属性(CallbackEvent objects 的数组)——寻找以下事件:
-
objectType = 行
-
eventType = 创建
当您看到满足此条件的CallbackEvent 对象时——保存id 属性的值——这就是新添加行的id(将是父行用于您要在其下添加的行)。
第 2 步:将行复制到目标工作表
接下来,您需要像您在帖子中描述的那样进行操作——即将行从另一个工作表复制到目标工作表,方法是使用 Copy Rows 操作。请注意,此操作将始终将复制的行放在目标工作表的底部。 (不能指定其他位置。)Copy Rows 操作的成功响应将返回一个CopyOrMoveRowResult 对象,如下所示:
{
"destinationSheetId": 2258256056870788,
"rowMappings": [
{
"from": 145417762563972,
"to": 4508365800925060
},
{
"from": 8026717110462340,
"to": 2256565987239812
}
]
}
在此响应中,rowMappings 数组将包含每个复制行的对象。您需要保存此数组中每个 to 属性的值 - 这些是您复制到目标工作表的新行的 ids。
第 3 步:将复制的行移动到目标工作表中的所需位置
所以,此时,您知道以下内容:
- 触发此工作流的新创建行的 id
- 已复制到目标工作表底部的每一行的id
最后,您需要将复制的行从目标工作表底部移动到目标工作表中的所需位置(即,在触发此工作流程的新创建行下方)。为此,您将使用Update Rows 操作。您可以发出单个 Update Rows 请求来移动所有 3 行。
例如,以下 Update Rows 请求将三行(由每个对象内的 id 属性标识)移动为指定父行(由 parentId 属性标识)的子行每个对象内)。请务必按照您希望它们出现的顺序指定行。在这个例子中——假设指定的父行下之前没有子行——行 ID 3170202670262148 成为第一个子行,然后是行 ID 7673802297632644 作为第二个子行,然后是行 ID @987654341 @ 作为第三个也是最后一个子行。
PUT /sheets/{sheetId}/rows
[
{
"id": 3170202670262148,
"parentId": 5225480965908356,
"toBottom": true
},
{
"id": 7673802297632644,
"parentId": 5225480965908356,
"toBottom": true
},
{
"id": 2044302763419524,
"parentId": 5225480965908356,
"toBottom": true
}
]
希望这会有所帮助。实现您描述的场景显然需要做一些工作,但它肯定是可能的。