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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Google スプレッドシート

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

Google フォーム

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

Google カレンダー

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

Google Apps Script

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

Q&A

解決済

1回答

1127閲覧

googleフォームの回答をスプレッドシートに反映させ、googleカレンダーに自動反映させたい

82ayaaya

総合スコア4

Google スプレッドシート

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

Google フォーム

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

Google カレンダー

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

Google Apps Script

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

0グッド

0クリップ

投稿2021/12/07 14:40

編集2021/12/07 14:49

前提・実現したいこと

googleフォーム>スプレッドシート>googleカレンダー>googleサイトにて社外向けのZoomミーティング仮予約予定表を作成したい。

スプレッドシート>googleカレンダーの連携、googleサイトは完成。

下記コードでスプレッドシートがカレンダーに反映したため、googleフォームから「既存のスプレッドシートを選択」し、spreadSheetTabNameをgoogleフォームのタブ(シート1)を選択したが反映しない。
トリガーはregisterAll、Head、スプレッドシートから、フォーム送信時。

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

‎例外: パラメーター (文字列、文字列、(クラス))は、カレンダーApp.Calendar.createEvent のメソッド シグネチャと一致しません。‎ (匿名) @ コード.gs:20 ‎登録すべて‎ @ コード.gs:19

該当のソースコード

// 設定 function getConfig() { return { spreadSheetId: '****', spreadSheetTabName: 'シート1' } } // カレンダーにイベントを登録 function registerAll() { var config = getConfig(); var spreadSheet = SpreadsheetApp.openById(config.spreadSheetId); var sheet = spreadSheet.getSheetByName(config.spreadSheetTabName); var eventIds = sheet .getDataRange() .getValues() .filter(function (e, i) { return i !== 0 && e[6] === ''; }).map(function (e) { var calendarEvent = CalendarApp.getCalendarById("****").createEvent( e[0], e[1], e[2], { description: e[3], location: e[4], guests: e[5] }); return [calendarEvent.getId()]; }); if (eventIds.length === 0) return; sheet.getRange('G2:G' + (eventIds.length+1) ).setValues(eventIds); } // 登録されたイベントをキャンセルして、シートから削除 function cancelAll() { var range = 'G2:G1000'; var config = getConfig(); var spreadSheet = SpreadsheetApp.openById(config.spreadSheetId); var sheet = spreadSheet.getSheetByName(config.spreadSheetTabName); sheet .getRange(range) .getValues() .filter(function (eventId) { return eventId[0] !== ''; }).forEach(function (id) { CalendarApp.getCalendarById("****").getEventById(id).deleteEvent(); }); sheet.getRange(range).clear(); }

試したこと

イメージ説明
イメージ説明
参考にしたURLのスプレッドシート(シート2)と、
googleフォームの回答欄(シート1)が異なるため反映しないのだと考え
description: e[3],
location: e[4],
guests: e[5]
を削除しました。
スプレッドシート(シート2)のままにすればカレンダーに反映しますが、トリガーやフォームと結びついてないため悩んでおります。

また、googleフォームが入力されたらの情報を反映するトリガーが必要と考え
function onFormSubmit(e) {
// フォームの回答を取得
let Name = e.values[1];// 登録者の氏名
let Start_time = new Date(e.values[2]);// 予約の開始時刻
let End_time = new Date(e.values[3]);// 予約の終了時刻
を追加してみましたが、益々エラーが増えて困っております…
当方初心者で、本屋にて初心者版を確認、HPで調べても分からず困っております。

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

ソースコード欄にあります「****」は本来入力しております。
その他空欄は入力しておりません。

下記URLを参考に作成しました。
https://qiita.com/tanabee/items/7ebcc63e5b561d18a582#2-google-apps-script-%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%8B%E3%82%89%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

https://kogyo-kyoiku.net/form-to-calendar/

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/12/07 15:10

「シート1」のF列よりも後(G列以降)にも何かフォームから取得しているデータがあるのでしょうか? もしそうならば、「シート1」のG列以降にどのようなデータが入っているかを御教示ください。
82ayaaya

2021/12/07 22:26

コメントありがとうございます。 画像1枚目にあります、F列(guests)、G列(eventid)となります。その他は入力ありません。 余談ですがこのシステムを当初Outlookで作成してたのですが、社外の人にOutlookアカウントを作成して貰うことが難しく…リアルタイムで反映せず使い物になりませんでした。 スプレッドシートの記入は出来る人が多いのでこの方法なら利用してもらえるのではと考えチャレンジしております。本当に難しいですね。。知識はあまりありませんが調べながら頑張りますので是非お力添えお願い致します。
macaron_xxx

2021/12/07 23:47

ちょっとよくわからないのですが、「該当のコード」で記載いただいているコードは正常に動いているコードですよね? エラーが出た時のコードを掲示いただかないとなんとも言えません。
82ayaaya

2021/12/08 08:26 編集

コメントありがとうございます。説明不足で申し訳ないです。 該当コードに記載させて頂いておりますコードに対して上記エラーが発生しております。 spreadSheetTabNameを'シート1'→'シート2'にすると正常に動きます。 そこの部分が変わるだけでなぜエラーが起こるのかが分からず困っております… 何か不足している情報がありましたら随時記載致しますので、お知恵を拝借できるととてもありがたいです。また、ここで相談すべきでない高度なもので、外部に依頼すべきものでしたらご教示頂けるとありがたいです。どうぞよろしくお願い致します。
macaron_xxx

2021/12/08 01:01

シート1のStartTimeには太郎とか入っているので、そりゃエラーになるでしょう。といった感じです。
82ayaaya

2021/12/08 01:10

やはりそこの記載の問題ですかね…そりゃそうですよね、カレンダーが読み込めないですもんね。 フォームと連携すると自動でその枠に回答が反映してしまうので… フォームに対して、『回答1はここに記載する』というようなコードを追加すべきということで認識正しかったでしょうか。 その場合、フォームで勝手に反映してくるタイムスタンプは必要ないので削除する方法を探しているのですが見つからず… タイムスタンプの降順で表示させる等の方法は見つかるのですが列の並べ替えに関しての方法が見当たらず… 行き詰まっております。 コメントありがとうございます!! もう少し調べてみます!!
82ayaaya

2021/12/10 05:10

大変申し訳ございません… 私が把握していたコードは「スプレッドシートに記載されている予定を全て一括で反映する」ためのもので、「スプレッドシートへ送信されたフォームを1つずつ予定に反映してくれる」コードではありません。 何重にも同じ予約が羅列するコードになっております… https://teratail.com/questions/192249 こちらを参考に、コードを作り直してきます(涙
82ayaaya

2021/12/10 05:18

(追記) macaron_xxx様に致しました評価はそのままにしたいので、1日時間をおいて別の質問枠にて再度質問させて頂きます。 解決済に致します。
guest

回答1

0

ベストアンサー

直接的な回答になるかわからないですが、コードの意味を理解していらっしゃらないようなので、補足がてら書いておきます。

javascript

1 var calendarEvent = CalendarApp.getCalendarById("****").createEvent( 2 e[0], e[1], e[2], 3 { 4 description: e[3], 5 location: e[4], 6 guests: e[5] 7 });

この部分でカレンダーに登録にいっているのですが、e[0]e[1]などの添え字が列番号です。
(列番号は0から始まります。A列=0、B列=1)

そのため、列の参照場所を変えればスクリプトは動くのではないかと思います。

投稿2021/12/08 01:23

macaron_xxx

総合スコア3191

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

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

82ayaaya

2021/12/08 02:18

わー!!ありがとうございます。おっしゃる通りです…コードの意味を上から順番に調べていたところです… 今出先なので、帰ったら試してみます!!!!お忙しい中、たくさんお返事頂いて感謝です。
82ayaaya

2021/12/08 08:17

ありがとうございました!下記の通りに修正してみたところ、無事実行ボタンを押せばスクリプトが動くようになりました!! 初心者にもわかりやすいように、ご教示頂き大変感謝しております。 var calendarEvent = CalendarApp.getCalendarById(""****"").createEvent( e[1], e[2], e[3], { Subject: e[0], location: e[4], guests: e[5] }); トリガーもうまく作動致しました。 丁寧なご回答ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問