GASでスプレッドシート からGoogleカレンダーに予定を追加するコードを書いているのですが、シートの取得が上手くいきません。
ファイル名(スケジュール)の中から二番目のシート(googleカレンダー連携)に記述した内容をGoogleカレンダーにGASで入力したいです。
GAS
1コード 2/** 3 * スプレッドシート表示の際に呼び出し 4 */ 5function onOpen() { 6 7 var ss = SpreadsheetApp.getActiveSpreadSheet(); 8 9 //スプレッドシートのメニューにカスタムメニュー「カレンダー連携 > 実行」を作成 10 var subMenus = []; 11 subMenus.push({ 12 name: "実行", 13 functionName: "createSchedule" //実行で呼び出す関数を指定 14 }); 15 ss.addMenu("カレンダー連携", subMenus); 16} 17 18/** 19 *予定を作成する 20 */ 21 function creatschedule() { 22 23 //連携するアカウント 24 const gAccount = "xxxxxxxxx@gmail.com"; // 25 26 //読み取り範囲(表の始まり行と終わり列) 27 const topRow = 6; 28 const lastCol = 9; 29 30 //0始まりで列を指定しておく 31 const statusCellNum = 1; 32 const dayCellNum = 2; 33 const startCellNum = 4; 34 const endCellNum = 5; 35 const titleCellNum = 6; 36 const locationCellNum = 7; 37 const descriptionCellNum = 8; 38 39 // シートを取得 40 var sheet = SpreadsheetApp.getSheetByName(googleカレンダー連携); 41 42 43 // 予定の最終行を取得 44 var lastRow = sheet.getLastRow(); 45 46 // 予定の一覧を取得 47 var contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues(); 48 49 // googleカレンダーの取得 50 var calendar = CalendarApp.getCalendarById(gAccount); 51 52 //順に予定を作成(今回は正しい値が来ることを想定) 53 for (i = 0; i <= lastRow - topRow; i++) { 54 55 // 「済」っぽいのか、空の場合は飛ばす 56 var status = contents[i][statusCellNum]; 57 if ( 58 status == "済" || 59 status == "済み" || 60 status == "OK" || 61 contents[i][dayCellNum] == "" 62 ) { 63 continue; 64 } 65 66 // 値をセット 日時はフォーマットして保存 67 var day = new Date(contents[i][dayCellNum]); 68 var startTime = contents[i][startCellNum]; 69 var endTime = contents[i][endCellNum]; 70 var title = contents[i][titleCellNum]; 71 // 場所と詳細をセット 72 var option = {location: contents[i][locationCellNum], description: contents[i][descriptionCellNum]}; 73 74 try { 75 // 開始終了がなければ終日で設定 76 if (startTime == '' || endTime == '') { 77 //予定を作成 78 calendar.createAllDayEvent( 79 title, 80 new Date(day), 81 options 82 ); 83 84 //開始終了時間があれば範囲で設定 85 } else { 86 // 開始日時をフォーマット 87 var startDate = new Date(day); 88 startDate.setHours(startTime.getHours()) 89 startDate.setMinutes(startTime.getMinutes()); 90 // 終了日時をフォーマット 91 endDate.setHours(endTime.getHours()) 92 endDate.setMinutes(endTime.getMinutes()); 93 // 予定を作成 94 calendar.createEvent( 95 title, 96 startDate, 97 endDate, 98 options 99 ); 100 } 101 102 // 無事に予定が作成されたら「済」にする 103 sheet.getRange(topRow + i, 2).setValue("済"); 104 105 // エラーの場合(今回はログ出力のみ) 106 } catch(e) { 107 Logger.log(e); 108 } 109 110 } 111 // ブラウザへ完了通知 112 Browser.msBox("完了"); 113 }
回答1件
あなたの回答
tips
プレビュー