🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

date

dateは、date型や日付に関する関数や処理についてのタグです

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

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

Q&A

解決済

1回答

5179閲覧

Googleフォームから申請された予約をGoogleカレンダーに表示する方法

ko1

総合スコア23

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

date

dateは、date型や日付に関する関数や処理についてのタグです

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

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

0グッド

0クリップ

投稿2021/01/19 08:51

編集2021/01/20 23:18

お世話になります。
GoogleフォームからGoogleカレンダーに表示する方法についてご教示頂きたいです。

実際の流れとして、Googleフォーム→Googleスプレッドシート→Googleカレンダーです。
ネットで見つけたGASのコードの変数などをイジり、スプレッドシートおよびカレンダーに表示させる事はできましたが、

なぜか「予定の開始日時は終了日時より前にしてください。」とエラーが出ます。

それも原因がわからず、予約を10:00~11:00で申請するとうまく表示され、

10:00~18:00と時間を長めにすると失敗します。

function sendToCalendar(e) {
try{
//有効なGooglesプレッドシートを開く
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

//新規予約された行番号を取得
var num_row = sheet.getLastRow();

//新規予約された行から名前を取得
var nname = sheet.getRange(num_row, 2).getValue();

//メールアドレスの取得
var nmail = sheet.getRange(num_row,4).getValue();

//予約を記載するカレンダーを取得
var cals = CalendarApp.getCalendarById("GoogleカレンダーのID");

//予約の開始時間を取得
var stime = new Date(sheet.getRange(num_row, 6).getValue());

//予約の終了時間を取得
var etime = new Date(sheet.getRange(num_row, 7).getValue());

var ndate = new Date(sheet.getRange(num_row, 5).getValue());
var ndates= new Date(ndate.getFullYear(),ndate.getMonth(),ndate.getDate(),stime.getHours(),stime.getMinutes(),0);
var ndatee= new Date(ndate.getFullYear(),ndate.getMonth(),ndate.getDate(),etime.getHours(),etime.getMinutes(),0);

// 先約があるかどうか調べる
if(cals.getEvents(ndates, ndatee)==0){

var thing = nname+"様 ご予約";

//予約情報をカレンダーに追加
var r = cals.createEvent(thing, ndates, ndatee);
var thing =nname+"様 \n\n 予約を承りました"

MailApp.sendEmail(nmail,"仮ご予約",thing);
}
else{
var thing =nname+"様 \n\n 先行予約あり"

MailApp.sendEmail(nmail,"予約できませんでした",thing);
}

} catch(exp){
//実行に失敗した時に通知
MailApp.sendEmail(nmail, exp.message, exp.message);
}
}

変数を変更したりしましたが原因はわからず仕舞いでした。

恐縮ですがご教示のほどよろしくお願いします。

コードを参考させて頂いた方のHPを記載します。

https://tom2rd.sakura.ne.jp/wp/2017/07/27/post-5346/

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

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

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

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

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

guest

回答1

0

ベストアンサー

似たような質問を他の方もしてた気がしますが、エディタのタイムゾーンが東海岸になってるからじゃないでしょうか? 新しいエディタの影響ですかね。

タイムゾーンが違うと時差が影響して 10:00は20:00、18:00は 翌日の 04:00 とみなされてしまい、年、月、日の部分を揃えてしまうと、例えば 2021/01/22 20:00 - 2021/01/22 04:00 でスケジュールを入れようとして、「予定の開始日時は終了日時より前にしてください。」というエラーになるのかと。

エディタの歯車ボタンで設定を開き、「appsscript.json」マニフェスト ファイルをエディタで表示する にチェックを入れると、appsscript.jsonが編集できるようになります。

そこのタイムゾーン(たぶん "timeZone": "America/New_York", となってる)を以下のようにあ日本設定にしてあげれば改善されると思います。

"timeZone": "Asia/Tokyo",

投稿2021/01/22 00:30

sawa

総合スコア3002

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

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

ko1

2021/01/22 02:56

ご丁寧にご教示頂きありがとうございます! 教えていただいた方法で無事解決致しました。 大変感謝致します。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問