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

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

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

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

1回答

19112閲覧

Googleフォームからの送信内容をGoogleカレンダーに反映させたい

SaiTan

総合スコア17

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2019/05/30 09:08

編集2019/05/31 03:58

Googleフォームから送信された時にその内容をGoogleカレンダーに反映させるGASを作成しているのですが、
Googleカレンダーへの反映が出来ません。
当方は独学初心者です。

フォームの内容は打ち合わせの候補日程確認で、質問は以下4項目です。
① 会社名
② 打ち合わせ候補日
③ 打ち合わせ可能時間帯 開始時間
④ 打ち合わせ可能時間帯 終了時間

Googleカレンダー上では、①をタイトルとして説明文は空白のままです。

お恥ずかしいのですが、、ご教示のほどよろしくお願いいたします。

/* 指定月のカレンダーからイベントを取得する */ function addTaskEvents() { var myCal = CalendarApp.getCalendarById('g.softbank.co.jp_ve8eemff14kha6crvetb0qsm0g@group.calendar.google.com'); //カレンダーIDでカレンダーを取得 var mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得 var dat = mySheet.getDataRange().getValues(); //シートデータを取得 for(var i=1;i<dat.length;i++){ if(dat[i][4] == ""){ /* 日時をセット */ var evtDate = new Date(dat[i][2]); var evtstartTime = new Date(dat[i][3]);   var evtendTime = new Date(dat[i][4]); evtDate.setHours(evtstartTime.getHours()); evtDate.setMinutes(evtstartTime.getMinutes()); evtDate.setHours(evtendTime.getHours()); evtDate.setMinutes(evtendTime.getMinutes()); /* イベントの追加・スプレッドシートへの入力 */ var myEvt = myCal.createEvent(dat[i][1],evtDate,evtDate); //カレンダーにタスクをイベントとして追加 dat[i][4]=myEvt.getId(); //イベントIDを入力 dat[i][5]='完了'; } } mySheet.getRange(1,1,i,8).setValues(dat); //データをシートに出力 }

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

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

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

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

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

guest

回答1

0

evtDateevtstartTimeevtendTimeの時間を上書いていますが
evtstartTimeevtendTimeevtDateの年月日を上書いて
myCal.createEvent(dat[i][1],evtstartTime,evtendTime);
こうじゃないですか?

投稿2019/05/31 06:17

macaron_xxx

総合スコア3191

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

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

SaiTan

2019/05/31 06:38

ありがとうございます。 助言とおり修正し実行したのですが、やはりカレンダーには反映されませんでした。。
SaiTan

2019/05/31 06:39

/* 日時をセット */ var evtDate = new Date(dat[i][2]); var evtstartTime = new Date(dat[i][3]); var evtendTime = new Date(dat[i][4]); evtstartTime.setHours(evtDate.getHours()); evtstartTime.setMinutes(evtDate.getMinutes()); evtendTime.setHours(evtDate.getHours()); evtendTime.setMinutes(evtDate.getMinutes()); /* イベントの追加・スプレッドシートへの入力 */ var myEvt = myCal.createEvent(dat[i][1],evtstartTime,evtendTime); //カレンダーにタスクをイベントとして追加
macaron_xxx

2019/05/31 06:44

ちゃんと読んでます? 年月日を設定してくださいね。
macaron_xxx

2019/05/31 06:45

というか、var evtstartTime = new Date(dat[i][3]);これがちゃんと時間になってない気がする。
SaiTan

2019/06/03 06:25

指摘いただきありがとうございます。 改めて見直しを行い、以下で設定しました。 ========= /* 指定月のカレンダーからイベントを取得する */ function addTaskEvents() { var myCal = CalendarApp.getCalendarById('g.softbank.co.jp_tflu0k20uivmi32226r2aujtqk@group.calendar.google.com'); //カレンダーIDでカレンダーを取得 var mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得 var dat = mySheet.getDataRange().getValues(); //シートデータを取得 for(var i=1;i<dat.length;i++){ if(dat[i][5] == ""){ /* 日時をセット */ var evtDate = new Date(dat[i][2]); var evtstartTime = new Date(dat[i][3]); var evtendTime = new Date(dat[i][4]); var StartDateTime = new Date(evtDate.getFullYear(),evtDate.getMonth(),evtDate.getDate(),evtstartTime.getHours(),evtstartTime.getMinutes()); var EndDateTime = new Date(evtDate.getFullYear(),evtDate.getMonth(),evtDate.getDate(),evtendTime.getHours(),evtendTime.getMinutes()); Logger.log(StartDateTime) Logger.log(EndDateTime) /* イベントの追加・スプレッドシートへの入力 */ var myEvt = myCal.createEvent(dat[i][1],StartDateTime,EndDateTime); //カレンダーにタスクをイベントとして追加 dat[i][5]=myEvt.getId(); //イベントIDを入力 dat[i][6]='完了'; } } mySheet.getRange(1,1,i,4).setValues(dat); //データをシートに出力 } ========= 上記で実行したところ「予定の開始日時は終了日時より前にしてください。」のメッセージが表示されました。Googleカレンダーではタイムゾーンを日本標準時間にしていますし、スプレットシートも同様にされていることを確認しています。 何か原因はありますでしょうか?
macaron_xxx

2019/06/05 00:18

StartDateTimeとEndDateTimeをログ出力されてますよね。 それを確認してみては?
macaron_xxx

2019/06/05 00:19

おそらく、ですが var evtstartTime = new Date(dat[i][3]); がうまく行っていない気がします。 (データがないのでなんとも言えないですが)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問