getCalendarById,其中ID是字符串

时间:2017-02-28 06:00:52

标签: google-apps-script

在Google电子表格上有几个日历ID。每个都在B列中,格式为“SuperLongStringGoesHere@group.calendar.google.com”。

当我手动输入日历ID而不是使用变量(变量是calRngVal)时,工作正常。当我使用变量时,它返回null。如何使用变量调用getCalendarById?

var calRng = calids.getRange(a, 2);
var calRngVal = calRng.getDisplayValue();
var cal = CalendarApp.getCalendarById(calRngVal);
var ad = cal.getName();      

提前致谢!

以下是调试器的图片:debugger

2 个答案:

答案 0 :(得分:0)

您确定代码正在选择其中包含日历ID值的单元格吗?试试这个:

var calRng = calids.getRange("A1:B");
var calRngVal = calRng.getValues();
var cal = CalendarApp.getCalendarById(calRngVal[1][1]);
var ad = cal.getName(); 

如果它不起作用,请尝试使用记录器:

Logger.log(calRngVal);

答案 1 :(得分:0)

使用存储在工作表中的字符串值,您无需执行任何特殊操作来访问日历。您的方法和Simon的答案中提到的方法都应该有效。

肯定会出现其他问题。您确定您有权访问表格中列出的所有日历吗?如果您没有权限,getCalendarById将返回null。

在try / catch块中调用getCalendarById之后包装代码,以便一个“坏”日历不会使脚本崩溃。

EG:

var calRng = calids.getRange(a, 2);
var calRngVal = calRng.getDisplayValue();
var cal = CalendarApp.getCalendarById(calRngVal);
try{
   var ad = cal.getName();  
   //other code here
}catch(e){
   Logger.log('Exception processing '+calRngVal+', row '+a+'. Message: '+e);
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch

另请注意,逐个循环和获取范围是一种缓慢的方法,您可以使用getDataRange()以二维数组的形式返回工作表中的所有数据,然后循环遍历数组。但是,我会在优化之前修复“null”问题。