2013-11-18 2 views
0

전 Google 애플 리케이션 스크립트에 완전히 익숙하고 양식에서 새 행을 추가하고 그 정보를 사용하여 새 캘린더를 만들 때 Google 스프레드 시트에서 정보를 가져올 간단한 스크립트를 작성하려고합니다. 행사. 여기까지 (캘린더 및 스프레드 쉬트 ID가 삭제되었습니다).Google 양식에서 Google 캘린더에 게시하는 스크립트. 승인 루프에 갇혀있다

function addToCalendar() { 

    //Get the spreadsheet by its id, set it as active, then select the last row to always have the most recent 

    var getByID = SpreadsheetApp.openById("SS ID"); 
    SpreadsheetApp.setActiveSpreadsheet(getByID); 
    var spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = spreadSheet.getSheets()[1]; 
    var row = sheet.getLastRow(); 

    //Declare variables for the required text fields and set them equal to corresponding cell values 
    var name = sheet.getRange(row, 2).getValue(); 
    var subject = sheet.getRange(row, 3).getValue(); 
    var date = (sheet.getRange(row, 4).getValue()).toDateString(); 
    var startTime = date + " " + (sheet.getRange(row, 5).getValue()).toTimeString(); 
    var endTime = date + " " + (sheet.getRange(row, 6).getValue()).toTimeString(); 

    //Call the calendar and add the event 
    var calendar = CalendarApp.getCalendarById('CALENDAR ID'); 
    var event = calendar.createEvent(name, 
         new Date(startTime), 
         new Date(endTime) 
        ); 
    Logger.log('Event ID: ' + event.getId()); 
} 

코드를 실행할 때 루프에서 반복적으로 앱을 인증하라는 메시지가 표시됩니다. 트리거는 양식 제출시 스프레드 시트에서 기능을 실행하도록 설정됩니다. 나는이 문제가 스프레드 시트를 호출하는 방법과 관련이 있을지도 모른다고 생각하지만이 코드를 문서에서 직접 복사하려고 시도했다. 이 부분은 혼란 스럽기 때문에 날짜를 형식화하는 데 또 다른 문제가있을 수 있습니다 (비교적 새로운 js).

답변

0

스프레드 시트에서 날짜를 검색 할 때 이미 JavaScript Date 객체 인 경우 date methods을 사용하여 원하는 것을 얻을 수 있습니다. 아래 예제 코드를 참조하십시오.

또한 작업 할 스프레드 시트를 활성화 할 필요가 없습니다. openById이면 충분합니다.

function addToCalendar() { 

    //Get the spreadsheet by its id, set it as active, then select the last row to always have the most recent 
    var spreadSheet = SpreadsheetApp.openById("SS ID"); 
    var sheet = spreadSheet.getSheets()[0];// 0 for first sheet, 1 for second ... 
    var row = sheet.getLastRow(); 

    //Declare variables for the required text fields and set them equal to corresponding cell values 
    var name = sheet.getRange(row, 2).getValue(); 
    var subject = sheet.getRange(row, 3).getValue(); 
    var date = sheet.getRange(row, 4).getValue(); 
    var startTime = sheet.getRange(row, 5).getValue(); 
    var endTime = sheet.getRange(row, 6).getValue(); 
    var year = date.getFullYear(); 
    var month = date.getMonth()-1; 
    var day = date.getDate(); 
    var startTime = new Date(sheet.getRange(row, 5).getValue().setFullYear(year,month,day));// keep hours and minutes but set day and month 
    var endTime = new Date(sheet.getRange(row, 6).getValue().setFullYear(year,month,day));// keep hours and minutes but set day and month 
    Logger.log('start : '+startTime+' - end : '+endTime); 
    //Call the calendar and add the event (uncomment below when you have filled with your own calendar data) 
// var calendar = CalendarApp.getCalendarById('CALENDAR ID'); 
// var event = calendar.createEvent(name, startTime,endTime); 
// Logger.log('Event ID: ' + event.getId()); 
} 
+0

매력처럼 작동합니다. – Mattayo

관련 문제