google-apps-script - 当另一个用户帐户打开工作表时,如何让电子表格按钮像我一样运行独立脚本

标签 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 中的函数触发器,但这似乎不起作用。

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

最佳答案

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

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

    您的问题原因:

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

    解决方法:

    作为几种解决方法之一,使用 Web 应用程序怎么样? TheMaster 也提到了这一点.当 Web 应用程序部署为 Execute the app as: Me ,即使其他用户运行 Web Apps 的脚本,该脚本也是作为 Web Apps 的所有者(您)运行的。在这种情况下,当用户通过单击按钮运行脚本时,用户会请求您使用 UrlFetchApp 部署的 Web 应用程序。这样,用户就可以使用您的任务列表 ID。此解决方法使用这种情况。此解决方法的流程如下。
  • 将脚本部署为 Web 应用程序。
  • 设置 Execute the app as:Me .
  • 设置 Who has access to the app:Anyone, even anonymous .此设置用于测试。
  • 用户使用已部署的 Web 应用程序,如外部 API。

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

    示例脚本:

    示例脚本如下。服务器端(您的脚本)和客户端(用户的脚本)分别有 2 个示例脚本。您也可以将两个脚本放在同一个项目中。
  • 请将“服务器端”复制并粘贴到您的项目中,并将其部署为 Web 应用程序。
  • 关于如何部署Web Apps,可以查看here .
  • 请将“客户端”复制并粘贴到用户的项目中(电子表格的绑定(bind)脚本包括按钮)。此时,请设置 Web Apps 的 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 脚本时,请重新部署为新版本。这样,最新的脚本就会反射(reflect)到 Web 应用程序中。这是使用 Web 应用程序的重要一点。
  • 在此解决方法中,库和客户端是分开的。作为客户端的用户从 Web 应用程序中检索数据。

  • 引用:
  • Web Apps
  • Taking advantage of Web Apps with Google Apps Script

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

    关于google-apps-script - 当另一个用户帐户打开工作表时,如何让电子表格按钮像我一样运行独立脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55878612/

    相关文章:

    javascript - 如何防止在工作表上手动更改(不是由脚本编写的)?

    javascript - 指定列有更新时触发的 OnChange 触发器

    google-apps-script - Google 表单提交按钮的 onClick 事件

    excel - 将预览悬停在 Excel 图像链接上

    javascript - 无法在 Google 脚本中返回二维数组?

    google-apps-script - Google App 脚本 - 为什么 getTemporaryActiveUserKey() 为唯一用户返回相同的值

    email - 如何将当前用户的电子邮件地址传递给 Google Script

    google-sheets - 如何通过谷歌工作表对 importhtml 的工作表进行排序,正在使用 Unresolved 查询

    javascript - 更新并插入数据而不是完全替换

    google-sheets - 在Google Spreadsheets中的= QUERY语句中添加 “sort”