我在独立脚本中有一些代码,可以从我的一个任务列表中返回任务。
var tasklistID="mytaslistid"
function getTasks() {
var tasks=Tasks.Tasks.list(tasklistID)
return tasks
}
通过已安装的onEdit
触发器进行调用时,代码可以正常工作。但是用户可能需要简单地刷新电子表格上的任务列表。因此,我插入了一个按钮,该按钮在有界脚本中调用一个函数,而该脚本又在独立脚本中调用了该函数
function getTasks(){
TaskManagerScript.getTasks()
}
但这仅在我的帐户中打开电子表格时有效。在另一个帐户中打开后,它将返回其他用户任务。
我试图刷新电子表格并在getTasks
触发器中运行onOpen
函数,但这似乎不起作用。
我需要协助才能找到解决方法。
答案 0 :(得分:3)
如果我的理解正确,那么这个答案如何?请认为这只是几个答案之一。
当用户通过单击工作表上的按钮在电子表格上运行脚本时,该脚本将以每个用户的身份运行。这样,用户无法从用户的任务列表中找到mytasklistid
中的var tasklistID="mytasklistid"
。我认为您的问题的原因是这样。
作为几种解决方法之一,如何使用Web Apps? TheMaster也提到了这一点。当Web Apps部署为Execute the app as: Me
时,即使其他用户运行Web Apps的脚本,该脚本也将作为Web Apps的所有者(您)运行。在这种情况下,当用户通过单击按钮运行脚本时,用户会请求使用UrlFetchApp部署的Web Apps。这样,用户可以使用您的任务列表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)
}
如果我误解了您的问题,而这不是您想要的结果,我深表歉意。
答案 1 :(得分:0)
请考虑将getTasks()
设置为在time-based trigger上自动运行,该运行将随您执行。
“编辑”菜单(在独立脚本中)>当前项目的触发器>“添加触发器”按钮
如果该基于时间的触发频率足够,则无需刷新按钮或Web应用程序部署。