2017-02-28 2 views
0

Google 스프레드 시트에는 여러 개의 캘린더 ID가 있습니다. 각 항목은 B 열에 있으며 '[email protected]'형식입니다.getCalendarById 여기서 ID는 문자열입니다.

변수 대신 calRngVal을 사용하여 캘린더 ID를 수동으로 입력하면 문제가 해결됩니다. 변수를 사용할 때 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 호출 후 코드를 감싸서 "나쁜"달력 하나가 스크립트를 크래시하지 않도록하십시오.

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()를 사용할 수 있습니다 시트를 2 차원 배열로 배열 한 다음 배열을 반복하면됩니다. 그러나 최적화하기 전에 "null"문제를 해결할 것입니다.

+0

정확합니다. 스크립트를 실행하고 있던 계정과 캘린더 중 일부를 공유해야했습니다. 너와 사이먼 모두에게 감사한다. – 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 스크립트 뒤에 Javascipt 인터프리터가 있습니다. 이를 위해 변수 String과 문자열을 직접 입력하는 것 사이에는 차이가 없습니다. 내가 제공 한 코드를 사용해 보셨습니까? –

+0

안녕하세요, Simon, 네, 시도해 보니 동일한 오류가 발생합니다. 나는 디버거의 그림을 붙이려고 시도 할 것이므로 당신이 보여주고있는 것을 볼 수있다. – Neill