Google 脚本 + 工作表 + 日历 "You do not have permission to call getCalendarsByName"

Google Scripts + Sheets + Calendar "You do not have permission to call getCalendarsByName"

我有一个 google 脚本,代码如下:

function hoursBetween(fromDate, toDate) {
  var dates = initializeDates();
  var from = dates[fromDate];
  var to = dates[toDate];
  var workCals = CalendarApp.getCalendarsByName('Work');
  var workCal = workCals[0];  
  var events = workCal.getEvents(from, to);
  var predictedMonthlyHours = 0;
 for (var i = 0; i < events.length; i++) {
   var event = events[i];
   var startTime = event.getStartTime();
   var endTime = event.getEndTime();
   var duration = endTime - startTime;
   duration =  parseFloat(duration/(3600*1000));
   duration -= dates['break'];
   predictedMonthlyHours += duration; 
 }
 return predictedMonthlyHours;
}

我在脚本编辑器中 运行 没有问题(它要求授权,我接受了) 当我尝试从我的电子表格调用该函数时,出现以下错误:

"You do not have permission to call getCalendarsByName"

我也试过添加触发器,但没有结果。

因为该方法正在寻找多个 "Calendars",所以它返回一个日历数组。因此,如果您只有一个名为 "Work" 的日历,您仍然需要调用它并选择它是哪一个。所以尝试将变量 "workCals" 更改为 `

var workCals = CalendarApp.getCalendarsByName('Work')[0];

添加 [0] 将选择第一个可用的。

看不到其余代码,难以破译。

您尝试如何从电子表格中调用?

如果您尝试通过电子表格公式 =hoursBetween() 进行调用,那么它将不起作用。参见 Custom Functions..."Unlike most other types of Apps Scripts, custom functions never ask users to authorize access to personal data. Consequently, they can only call services that do not have access to personal data,"

设置单元格值的其他选项:

  • 在边栏插件中手动单击按钮
  • 手动点击自定义菜单选项
  • 自动为 运行 安装定时触发器