2017-02-28 18 views
0

GoogleスプレッドシートにはいくつかのカレンダーIDがあります。それぞれはB列にあり、 "[email protected]"の形式です。getCalendarById IDが文字列の場合

変数を使用する代わりにカレンダーIDを手動で入力すると機能します(変数はcalRngValです)。変数を使用すると、nullが返されます。変数を使用してgetCalendarByIdを呼び出すにはどうすればよいですか?

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

ありがとうございます!ここで

は、デバッガの写真です:debugger

答えて

0

あなたはに格納されている文字列値を使用してカレンダーにアクセスするために特別なことをする必要はありませんシート。あなたのアプローチと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"の問題を修正します。

+0

あなたは正しいです。スクリプトを実行していたアカウントのカレンダーを共有する必要がありました。あなたとSimonの両方に感謝します。 – Neill

+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); 
+0

はい、セルにはカレンダーID値があります。デバッガを見ると、calRngValに文字列があり、引用符で囲まれていることがわかります。「[email protected]」 – Neill

+0

Google Apps Scriptの背後には、Javasciptインタプリタがあります。そのために、変数Stringと文字列を直接入力するだけの違いはありません。私が提供したコードを試しましたか? –

+0

こんにちはサイモン、はい、私はそれを試みたと私は同じエラーが発生します。デバッガの画像を添付して試してみて、それが何を表示しているのか見ることができます。 – Neill

関連する問題