在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();
提前致谢!
答案 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”问题。