Google Scripts + Sheets + Calendar"您无权调用getCalendarsByName"

时间:2015-07-07 02:09:59

标签: google-apps-script google-sheets google-authentication

我有一个包含以下代码的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;
}

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

&#34;您无权调用getCalendarsByName&#34;

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

2 个答案:

答案 0 :(得分:2)

您是如何从电子表格中调用的?

如果您尝试通过电子表格公式=hoursBetween()拨打电话,那么它就无法工作。请参阅Custom Functions ...&#34;与大多数其他类型的应用程序脚本不同,自定义功能从不要求用户授权访问个人数据。因此,他们只能拨打无法访问个人数据的服务,&#34;

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

  • 在侧栏附加组件中单击手动按钮
  • 手动点击自定义菜单选项
  • 安装定时触发器以自动运行

答案 1 :(得分:0)

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

system_clock::duration

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

看不到代码的其余部分,很难解读。