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

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

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

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

Google

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

Q&A

2回答

1719閲覧

Googleフォームのアンケート結果をカレンダーに反映させる際の年月日設定

YukiYoko

総合スコア0

Google Apps Script

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

Google

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

0グッド

2クリップ

投稿2021/12/15 03:07

前提・実現したいこと

教員をしているGAS初心者です。
三者面談の希望日調査とそのスケジューリングを簡単にできないかと思っていたところ、その方法を紹介するサイトを見つけ、やってみました。Googleフォームで回答してもらい、それがカレンダーに連携するようなプログラムです。私は今年の年末から来年の1月にかけて面談を実施したいと思っているのですが、そのサイトで紹介していたスクリプトは2021年に限定したものだったため、試しに実行してみると2022年1月に入れたつもりが2021年1月に入ってしまいます。初心者ゆえ、どこをどう変えたらいいのか分かりません。初歩的なことだとは思いますが、ご教授よろしくお願いいたします。

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

エラーメッセージはありません。2022年のカレンダーに入れたい内容が2021年に入ってきます。

該当のソースコード

GASです。

function sendToCalendar(e) {
try{
//年を入力***
var year = 2021;
//有効なGooglesプレッドシートを開く
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//新規予約された行番号を取得
var num_row = sheet.getLastRow();
//メールアドレスの取得
var nmail = sheet.getRange(num_row, 2).getValue();
//新規予約された行から出席番号を取得
var nnum = sheet.getRange(num_row, 3).getValue();
//新規予約された行から名前を取得
var nname = sheet.getRange(num_row, 4).getValue();
//予約を記載するカレンダーを取得
var cals = CalendarApp.getCalendarById("c_7h233a1gchct0vmda9e3r4n7cs@group.calendar.google.com");
//予約日を取得
var ndate = new Date(sheet.getRange(num_row, 5).getValue());
//予約の開始時間を取得
var stime = new Date(sheet.getRange(num_row, 6).getValue());
//予約の終了時間を取得(***開始時間から「15分」で指定!)
var etime = new Date(sheet.getRange(num_row, 6).getValue());
etime.setMinutes(etime.getMinutes()+15);//***面談時間が15分
var ndates= new Date(year,ndate.getMonth(),ndate.getDate(),stime.getHours(),stime.getMinutes(),0);
var ndatee= new Date(year,ndate.getMonth(),ndate.getDate(),etime.getHours(),etime.getMinutes(),0);
// 先約があるかどうか調べる
if(cals.getEvents(ndates, ndatee)==0){
var thing = nnum+"."+nname+"さんが予約しています。\n 別の時間帯を入力してください。";
//予約情報をカレンダーに追加
var r = cals.createEvent(thing, ndates, ndatee);
var thing =nnum+"番 "+nname+"さん \n\n 予約を受け付けました。\n 後日、確定のお知らせをいたします。\n\n ありがとうございました。"
MailApp.sendEmail(nmail,"三者面談 予約完了",thing);
}
else{
var thing =nname+"さん \n\n 予約の時間に先約がありましたので、\n 申し訳ございませんが、予約できませんでした。\n\n 時間帯を変更して再度お申込みください。"
MailApp.sendEmail(nmail,"予約できませんでした",thing);
}
} catch(exp){
//実行に失敗した時に通知
MailApp.sendEmail(nmail, exp.message, exp.message);
}
}

試したこと

3・4行目の『年を入力』というところが問題だとは思いますが、どうしていいか分からなかったのでそのままにしています。フォームの質問の希望日の回答パターンが年を除く月日のみになっていたのを年月日に変えてみました。それでは何も変わりませんでした。

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

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

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

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

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

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

guest

回答2

0

こんにちは。
一瞥したところ4行目の

var year = 2021;

でyearに2021を格納したまま24,25行目のndates,ndateeの年の引数に入れてしまっているからではないかと思いました。。
故に24,25行目を

GAS

1var ndates = new Date(ndate.getYear(), ndate.getMonth(), ndate.getDate(), stime.getHours(), stime.getMinutes(), 0); 2var ndatee = new Date(ndate.getYear(), ndate.getMonth(), ndate.getDate(), etime.getHours(), etime.getMinutes(), 0);

としては如何でしょうか?

投稿2021/12/15 05:49

T_mari

総合スコア73

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

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

YukiYoko

2021/12/16 01:27

回答していただきましてありがとうございます。 元の状態を保持して24・25行目を教えていただいたものに差し替えて実行しましたが、カレンダーには反映されませんでした。4行目はそのままです。ほかに直すべきところがあれば教えていただけると幸いです。本当にありがとうござした。
sawa

2021/12/16 04:18

横から失礼しますが、エラーが出ず完了になるけど カレンダーに反映されないということで、 実は 2021年の1月に反映されてたりしませんか? スプレッドシートの 予約日 の 該当セルの 年 が 2022 になっているか確認を。
T_mari

2021/12/16 04:30 編集

上記コメントに同内容の確認依頼になりますが26行目に console.log(ndate); を加えて実行ログに返ってきた値を教えて頂ければ解決方法を提案できるかもしれませんので、お知らせ頂ければと思います。
guest

0

年の足し算をしてやればいいです。
「GAS 年 足し算」みたいな検索キーワードで調べるといいです。

投稿2021/12/15 03:20

qqfsdfsafd

総合スコア599

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

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

YukiYoko

2021/12/16 01:33

回答していただきまして、ありがとうございました。教えていただいたとおり検索してみましたが、ちょっとよく分かりも回答していただきまして、ありがとうございました。教えていただいたとおり検索してみましたが、ちょっとよく分かりませんでした。せっかく教えていただいたにもかかわらず、初心者なもので申し訳ありません。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問