我在一个独立的脚本中有一些代码,它从我的一个任务列表中返回任务。
var tasklistID="mytaslistid"
function getTasks() {
var tasks=Tasks.Tasks.list(tasklistID)
return tasks
}
通过安装的
onEdit
调用代码时,代码工作正常。扳机。但是用户可能需要简单地刷新电子表格上的任务列表。所以我在有界脚本中插入了一个调用函数的按钮,该函数又调用了独立脚本中的函数function getTasks(){
TaskManagerScript.getTasks()
}
但这仅在我的帐户中打开电子表格时才有效。在另一个帐户中打开时,它会返回其他用户的任务。
我尝试刷新电子表格并运行
getTasks
onOpen
中的函数触发器,但这似乎不起作用。我需要帮助才能找到解决方法。
最佳答案
如果我的理解是正确的,这个答案怎么样?请认为这只是几个答案之一。
您的问题原因:
当用户通过单击工作表上的按钮在电子表格上运行您的脚本时,该脚本将作为每个用户运行。这样,用户找不到
mytasklistid
的 var tasklistID="mytasklistid"
从用户的任务列表中。我认为你的问题的原因是这个。解决方法:
作为几种解决方法之一,使用 Web 应用程序怎么样? TheMaster 也提到了这一点.当 Web 应用程序部署为
Execute the app as: Me
,即使其他用户运行 Web Apps 的脚本,该脚本也是作为 Web Apps 的所有者(您)运行的。在这种情况下,当用户通过单击按钮运行脚本时,用户会请求您使用 UrlFetchApp 部署的 Web 应用程序。这样,用户就可以使用您的任务列表 ID。此解决方法使用这种情况。此解决方法的流程如下。Execute the app as:
如Me
. Who has access to the app:
如Anyone, even anonymous
.此设置用于测试。 这样,用户可以使用您的任务列表。
示例脚本:
示例脚本如下。服务器端(您的脚本)和客户端(用户的脚本)分别有 2 个示例脚本。您也可以将两个脚本放在同一个项目中。
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)
}
笔记:
引用:
如果我误解了您的问题并且这不是您想要的结果,我深表歉意。
关于google-apps-script - 当另一个用户帐户打开工作表时,如何让电子表格按钮像我一样运行独立脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55878612/