あなたはに格納されている文字列値を使用してカレンダーにアクセスするために特別なことをする必要はありませんシート。あなたのアプローチとSimonの答えに記載されているアプローチの両方がうまくいくはずです。
間違ったことがあるはずです。シートに記載されているすべてのカレンダーにアクセスする権限がありますか?アクセス権がない場合、getCalendarByIdはnullを返します。
try/catchブロックでgetCalendarById呼び出しの後にコードを折り返し、1つの「悪い」カレンダーがスクリプトをクラッシュさせないようにします。
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()を使用することができ、一つの範囲をループしてフェッチすると1がこれを行うには遅い方法であることに注意してくださいシートを2次元配列にしてから、配列をループするだけです。しかし、私は最適化する前に "null"の問題を修正します。
あなたは正しいです。スクリプトを実行していたアカウントのカレンダーを共有する必要がありました。あなたとSimonの両方に感謝します。 – Neill
偉大なことはそれが解決した:) –