当工作表由另一个用户帐户打开时,如何获取电子表格按钮以像我一样运行独立脚本

时间:2019-04-27 08:16:38

标签: google-apps-script google-sheets

我在独立脚本中有一些代码,可以从我的一个任务列表中返回任务。

var tasklistID="mytaslistid"
function getTasks() {
    var tasks=Tasks.Tasks.list(tasklistID)
    return tasks
}

通过已安装的onEdit触发器进行调用时,代码可以正常工作。但是用户可能需要简单地刷新电子表格上的任务列表。因此,我插入了一个按钮,该按钮在有界脚本中调用一个函数,而该脚本又在独立脚本中调用了该函数

function getTasks(){
    TaskManagerScript.getTasks()
}

但这仅在我的帐户中打开电子表格时有效。在另一个帐户中打开后,它将返回其他用户任务。

我试图刷新电子表格并在getTasks触发器中运行onOpen函数,但这似乎不起作用。

我需要协助才能找到解决方法。

2 个答案:

答案 0 :(得分:3)

  • 您的电子表格已与用户共享。
  • 您想通过单击电子表格上的按钮使用户运行脚本。
  • 您想让用户使用您的任务列表。
    • 任务列表是您的。

如果我的理解正确,那么这个答案如何?请认为这只是几个答案之一。

问题的原因:

当用户通过单击工作表上的按钮在电子表格上运行脚本时,该脚本将以每个用户的身份运行。这样,用户无法从用户的任务列表中找到mytasklistid中的var tasklistID="mytasklistid"。我认为您的问题的原因是这样。

解决方法:

作为几种解决方法之一,如何使用Web Apps? TheMaster也提到了这一点。当Web Apps部署为Execute the app as: Me时,即使其他用户运行Web Apps的脚本,该脚本也将作为Web Apps的所有者(您)运行。在这种情况下,当用户通过单击按钮运行脚本时,用户会请求使用UrlFetchApp部署的Web Apps。这样,用户可以使用您的任务列表ID。此替代方法使用这种情况。此解决方法的流程如下。

  1. 将脚本部署为Web Apps。
    • Execute the app as:设置为Me
    • Who has access to the app:设置为Anyone, even anonymous。此设置用于测试。
  2. 用户使用已部署的Web应用程序,例如外部API。

这样,用户可以使用您的任务列表。

示例脚本:

示例脚本如下。服务器端(您的脚本)和客户端端(用户的脚本)分别有2个示例脚本。您也可以将两个脚本放在同一项目中。

  1. 请复制“服务器端”并将其粘贴到您的项目中,并将其部署为Web Apps。
    • 关于如何部署Web Apps,您可以在here上看到。
  2. 请复制“客户端”并将其粘贴到用户的项目(电子表格的绑定脚本,包括按钮)。此时,请设置Web应用程序的URL,例如https://script.google.com/macros/s/###/exec

服务器端:您的脚本

function doGet() {
  var tasks = getTasks();
  return ContentService.createTextOutput(JSON.stringify(tasks)).setMimeType(ContentService.MimeType.JSON);
}

function getTasks() {
  var tasklistID="mytasklistid";
  var tasks=Tasks.Tasks.list(tasklistID);
  return tasks;
}

客户端:用户脚本

请将此功能分配给按钮。

function getTask(){
  var url = "https://script.google.com/macros/s/###/exec";
  var tasks = UrlFetchApp.fetch(url);
  Logger.log(tasks)
}

注意:

  • 修改Web Apps脚本时,请重新部署为新版本。这样,最新脚本将反映到Web Apps。这是使用Web Apps的重要一点。
  • 在这种解决方法中,库和客户端是分开的。作为客户端的用户从Web Apps检索数据。

参考:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。

答案 1 :(得分:0)

请考虑将getTasks()设置为在time-based trigger上自动运行,该运行将随您执行。

“编辑”菜单(在独立脚本中)>当前项目的触发器>“添加触发器”按钮

如果该基于时间的触发频率足够,则无需刷新按钮或Web应用程序部署。