【GAS】연간 행사 일정표를 1년간 정리해 캘린더에 기입한다
Google이 지정하는 CSV 형식으로 미리 작성한 일정 목록을 캘린더 가져오기 기능을 사용하여 로드하면 캘린더에 일정을 정리해 쓸 수 있습니다만, 그것도 억권이 되어 왔으므로 이번 GAS로 단번에 쓸 수 있다 그렇게했습니다.
매우 초보적인 기능만으로 충분하기 때문에, GAS 프로그래밍 미경험자에게도 이해하기 쉬운 코드라고 생각합니다.
특징
쉬운 사용법
연간 행사 일정표 to 캘린더(공개용)을 클릭하여 드라이브에 복사본을 만듭니다
참조.
5. 스프레드 시트로 돌아가 새로 만든 메뉴 바의 "toCalendar"-> "캘린더에 출력"을 실행.
6. 확인창이 표시되므로 문제가 없으면 「OK」로 지정한 캘린더에 행사 일정표가 기입된다.
7. 실행 중에 오류가 발생하면 창에 오류 세부 정보가 표시되고 실행이 중지됩니다.
코드.gs
function onOpen() {
const ui = SpreadsheetApp.getUi();
const menu = ui.createMenu("toCalendar");
menu.addItem("カレンダーへ出力", "myFunction");
menu.addToUi();
}
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('年間行事予定表');
const range = sheet.getDataRange().getValues();
const id = 'カレンダーID'
const calendar = CalendarApp.getCalendarById(id);
const days = [];
// イベント作成時にアイドル時間を作らないとGASが止まる。アイドル時間の200に根拠はない
const THROTTLE_SLEEP_TIME = 200;
// 日付を作成
for(let i = 1; i < 276; i++){
days.push(`${range[0][0]}/${range[i][0]}/${range[i][1]}`);
}
for(let i = 276; i < 367; i++){
days.push(`${parseInt(range[0][0])+1}/${range[i][0]}/${range[i][1]}`);
}
range.shift();
let result = Browser.msgBox("行事予定表をカレンダーに書き込みます。\\n 【注意】 この操作は取り消せません!",Browser.Buttons.OK_CANCEL);
if(result == "ok"){
try{
for(let i = 0; i < days.length; i++){
if(range[i][2] !== ''){
const date = new Date(days[i]);
calendar.createAllDayEvent(range[i][2], date);
Utilities.sleep(THROTTLE_SLEEP_TIME);
}
if(range[i][3] !== ''){
const date = new Date(days[i]);
calendar.createAllDayEvent(range[i][3], date);
Utilities.sleep(THROTTLE_SLEEP_TIME);
}
}
}catch(e){
Browser.msgBox(e);
}
}
}
보충(THROTTLE_SLEEP_TIME 정보)
아무래도 GAS 실행시에 의도적으로 유휴 시간(THROTTLE_SLEEP_TIME)을 만들지 않으면 하루당 할당(캘린더 이벤트 작성수: 무료 계정 5000개, G Suite Basic 이상 10000개) 이내임에도 불구하고 오류로 멈춰 버립니다. 근무교의 행사 예정표는 THROTTLE_SLEEP_TIME=200(밀리 세컨드)으로 문제 없게 움직였습니다만, 이 수치는 이벤트수에 달려 있습니다. 새로 작성하는 이벤트가 적으면 0밀리초라도 오류가 발생하지 않을 수도 있습니다. 런타임에
You have been creating or deleting too many calendars or calendar events in a short time. Please try again later.
또는이 일본어 번역이 표시되면 스크립트 편집기에서 18 행의 THROTTLE_SLEEP_TIME 값을 조정해보십시오.
이것에 관해서는 현재, 스크립트 실행 시간의 6분 제한을 의식하면서 조정할 수밖에 없을 것 같습니다.
Reference
이 문제에 관하여(【GAS】연간 행사 일정표를 1년간 정리해 캘린더에 기입한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/oktaSI/items/ec23f1057cf056114465텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)