Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script getCalendarById,其中ID是字符串_Google Apps Script - Fatal编程技术网

Google apps script getCalendarById,其中ID是字符串

Google apps script getCalendarById,其中ID是字符串,google-apps-script,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

在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();      
提前谢谢


下面是调试器的图片:

您确定代码正在选择一个包含日历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);

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

一定是出了什么事。您确定有权限访问工作表中列出的所有日历吗?如果您没有权限,getCalendarById将返回null

将getCalendarById调用后的代码包装在try/catch块中,这样一个“坏”日历就不会使脚本崩溃

例如:


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

是的,单元格中有一个日历id值。当我观看调试器时,它显示calRngVal有一个字符串,用引号括起来。”7o5jcphfb102oa1hhl99hn80s4@group.calendar.google.com“在谷歌应用程序脚本的背后,只有一个Javascipt解释器在完成它的工作。因此,变量字符串和直接输入字符串之间没有区别。你试过我提供的代码了吗?嗨,西蒙,是的,我试过了,我得到了同样的错误。我将尝试附加调试器的图片,以便您可以查看它显示的内容。您是正确的。我需要与执行脚本的帐户共享一些日历。谢谢你和西蒙。
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);
}