質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

3135閲覧

【GAS】スプレッドシートからカレンダーへ予定登録で calendar.createEvent 命令がエラー

bally

総合スコア2

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2023/01/23 03:13

編集2023/01/23 20:04

前提

【GAS】スプレッドシートからカレンダーへ予定登録で今まで なんの問題なく動いていたのですが、トリガーの時間を5分から1分に変えてから、このエラーになり。 その後5分に戻しましたが、エラーのままになってしまいました。

実現したいこと

エラーとなっている calendar.createEvent 命令を正しくしたい。

発生している問題・エラーメッセージ

この命令で エラーになっている 10:46:39 情報 TypeError: Cannot read properties of null (reading 'createEvent') G翻訳で:TypeError: null のプロパティを読み取れません (「createEvent」を読み取っています)

/** * Googleカレンダーに予定を追加する */ function CreateSchedule() { // 読み取り範囲(表の始まり行と終わり列) const topRow = 2 const lastCol = 9 const statusCellCol = 1 const mainNUM = 1 // 予定の一覧バッファ内の列(0始まり) const statusNum = 0 const dayNum = 3 const startNum = 4 const endNum = 5 const titleNum = 2 const guestNum = 6 const descriptionNum = 7 const locationNum = 8 // シートを取得 const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() // 予定の最終行を取得 let lastRow = sheet.getLastRow() //予定の一覧をバッファに取得 const contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues() //順に予定を作成 for (let i = 0; i <= lastRow - topRow; i++) { // googleカレンダーの取得 let main = contents[i][mainNUM] const calendar = CalendarApp.getCalendarById(main) //「済」の場合は無視する if (contents[i][statusNum] === "済") { continue } // 値をセット 日時はフォーマットして保持 let day = contents[i][dayNum] let startTime = contents[i][startNum] let endTime = contents[i][endNum] let title = contents[i][titleNum] // 場所と詳細をセット let options = { guests: contents[i][guestNum],description: contents[i][descriptionNum],location: contents[i][locationNum]} console.log(day + " " + contents[i][titleNum]) try { // 開始終了時刻が無ければ終日で設定 if (startTime == '' || endTime == '') { //予定を作成 calendar.createAllDayEvent( title, day, options ) // 開始終了時刻があれば範囲で設定 } else { // 開始日時を作成 let startDate = new Date(day) startDate.setHours(startTime.getHours()) startDate.setMinutes(startTime.getMinutes()) // 終了日時を作成 let endDate = new Date(day) endDate.setHours(endTime.getHours()) endDate.setMinutes(endTime.getMinutes()) // 予定を作成 calendar.createEvent( title, startDate, endDate, options ) } //予定が作成されたら「済」にする sheet.getRange(topRow + i, statusCellCol).setValue("済") // エラーの場合ログ出力する } catch (e) { Logger.log(e) } } } ```ここに言語名を入力 ソースコード

試したこと

① ググって同じ情報が無いか?調べたが 無かった。
② トリガーの時間を変えてみたが同じ
③ デバッグ機能を使って 調べたが 必要な情報は連携されていた。

補足情報(FW/ツールのバージョンなど)

詳しいデバック情報を添付します。
よろしくお願いいたします。リンク内容

その後 デバッグで const calendar = CalendarApp.getCalendarById(main)
そもそも いままで取得で来ていた カレンダーIDを使っているのに この命令で NULL
が帰ってきているようです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobonobo

2023/01/23 05:01

Goのタグをつけていますが、Go言語に関する質問に見えません。タグを修正したほうが回答が得られやすいと思います。
bally

2023/01/23 05:32

ありがとうございます。 初めてでして使い方が分からず 後で気が付きまして。 タグをGASに変更しました。
guest

回答1

0

自己解決

もしかしたらと 思い 過去に カレンダーIDにアクセスしたことがある アカウントで GASを実行したら 上手く動きました。  なぜ?はわかりませんが 一応解決になります。 
ちなみに このカレンダーIDは 一般公開にしているので誰でも見れるはずなんですが???

投稿2023/01/23 11:04

bally

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問