如何知道 Google Apps 脚本的进度状态

How to know the progress status of a Google Apps script

我创建了一个 Apps 脚本来自动执行多项任务:

Function 1. - Create a new folder and retrieve the ID.
Function 2. - Create a copy of a doc file in the folder.
Function 3. - Replace the text of several tags of type {{TEXT}} in the document.
Function 4. - Insert an image in the document.
Function 5. - Retrieve the public link of the doc document.

这 5 个函数使用“全局”函数在同一个 Apps 脚本中按顺序执行,该函数允许我检索文件夹的 ID 和创建的 Doc 文档。 我 运行 这个 Apps 脚本使用 cURL(来自终端)。

脚本的持续时间大约为 10 秒,我想知道是否可以在每个函数完成时获得更新的消息(或文本值)作为响应。

我查看了互联网和 Whosebug,但我发现的所有内容都是指在电子表格中使用 'flush' 命令来更新单元格的值。我需要的是终端中的响应消息已更新。

有人可以帮我吗?

非常感谢。

沃迪亚姆

从您的以下函数中,

Function 1. - Create a new folder and retrieve the ID. Function 2. - Create a copy of a doc file in the folder. Function 3. - Replace the text of several tags of type {{TEXT}} in the document. Function 4. - Insert an image in the document. Function 5. - Retrieve the public link of the doc document.

我认为在你的情况下,可以使用以下3种模式。

  1. 所有函数都作为一个函数来处理。

    • 在这种情况下,您的目标I would like to know if it is possible to get a message (or a text value) in response that is updated as each function is completed.无法实现。
    • 为了在每个函数完成时检索响应,每次都使用 curl 命令执行每个函数。 .
    • 已经提到了这一点
  2. 当在“函数 1”创建新文件夹 ID 时,文件夹 ID 从函数返回,文件夹 ID 在“函数 2”中使用。并且,当复制文档时,文档 ID 从函数返回并将其用于“函数 3”、“函数 4”和“函数 5”。

    • 在这种情况下,不需要使用全局变量。为了检索响应,每次使用 curl 命令执行每个函数。但是,当每个函数执行时,每个响应值都需要提供给下一个函数。我认为这可能有点复杂。
  3. 当在“Function 1”创建新文件夹 ID 时,文件夹 ID 被放入 PropertiesService,当“Function 2”为 运行 时,使用从 PropertiesService 检索的文件夹 ID .并且,当复制文档时,将文档 ID 放入 PropertiesService,当“功能 3”、“功能 4”和“功能 5”为 运行 时,使用从 PropertiesService 检索的文档 ID。

    • 在这种情况下,不需要使用全局变量。并且,在每个函数中放入和获取的文件夹ID和文档ID是运行。这样,每个函数都可以使用 curl 命令按顺序 运行。所以,我认为使用curl命令的脚本可能会变得有点简单。

鉴于以上情况,我想在我的回答中提出模式3。

用法:

示例脚本:

作为测试此模式的示例脚本,使用了以下脚本。

// Create a new folder and retrieve the ID.
function function1() {
  const folderId = DriveApp.createFolder("sampleFolder").getId();
  PropertiesService.getScriptProperties().setProperty("folderId", folderId);
  return "Function1: Done.";
}

// Create a copy of a doc file in the folder.
function function2() {
  const folderId = PropertiesService.getScriptProperties().getProperty("folderId");
  const folder = DriveApp.getFolderById(folderId);
  const documentId = DocumentApp.create("sampleDocument").getId();
  DriveApp.getFileById(documentId).moveTo(folder);
  PropertiesService.getScriptProperties().setProperty("documentId", documentId);
  return "Function2: Done.";
}

function function3() {
  const documentId = PropertiesService.getScriptProperties().getProperty("documentId");

  // do something

  return "Function3: Done.";
}

function function4() {
  const documentId = PropertiesService.getScriptProperties().getProperty("documentId");

  // do something

  return "Function4: Done.";
}

function function5() {
  const documentId = PropertiesService.getScriptProperties().getProperty("documentId");

  // do something

  return "Function5: Done.";
}
  • 在此示例脚本中,在每个函数中放入和获取的文件夹 ID 和文档 ID 为 运行。
  • 在这个示例脚本中,没有错误处理。所以大家在使用的时候,请加上。

测试中。

为了从每个函数中检索每个响应,在本例中,脚本 运行 执行了 5 个 curl 命令。示例脚本如下

#!/bin/sh
accessToken="###your access token###"
url="https://script.googleapis.com/v1/scripts/###your script ID###:run"

curl -X POST -H "Authorization: Bearer ${accessToken}" -H "Content-Type: application/json" -d "{\"function\": \"function1\", devMode: true}" ${url}
curl -X POST -H "Authorization: Bearer ${accessToken}" -H "Content-Type: application/json" -d "{\"function\": \"function2\", devMode: true}" ${url}
curl -X POST -H "Authorization: Bearer ${accessToken}" -H "Content-Type: application/json" -d "{\"function\": \"function3\", devMode: true}" ${url}
curl -X POST -H "Authorization: Bearer ${accessToken}" -H "Content-Type: application/json" -d "{\"function\": \"function4\", devMode: true}" ${url}
curl -X POST -H "Authorization: Bearer ${accessToken}" -H "Content-Type: application/json" -d "{\"function\": \"function5\", devMode: true}" ${url}

当上述脚本为运行时,得到如下结果

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.apps.script.v1.ExecutionResponse",
    "result": "Function1: Done."
  }
}
{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.apps.script.v1.ExecutionResponse",
    "result": "Function2: Done."
  }
}
{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.apps.script.v1.ExecutionResponse",
    "result": "Function3: Done."
  }
}
{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.apps.script.v1.ExecutionResponse",
    "result": "Function4: Done."
  }
}
{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.apps.script.v1.ExecutionResponse",
    "result": "Function5: Done."
  }
}

当然,作为测试,你也可以手动运行每个curl命令。

注:

  • 在此答案中,假设您已经能够使用 Google Apps Script API 执行 Google Apps Script 项目的功能。请注意这一点。

参考: