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

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

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

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

Google カレンダー

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

Google Apps Script

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

Q&A

解決済

1回答

228閲覧

Googleスプレッドシートにリスト化した予定をGASを使ってGoogleカレンダーに登録

Yutaengineer

総合スコア2

Google スプレッドシート

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

Google カレンダー

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

Google Apps Script

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

0グッド

2クリップ

投稿2023/11/17 14:22

実現したいこと

GAS初心者です。
Googleスプレッドシートにリスト化した予定をGASを使ってGoogleカレンダーに登録したいです。
もし修正方法がわかる方がいましたら教えていただけますと幸いです。

前提

スプレッドシートでは、「D54:I154」のセルに「D列:タイトル」、「E列:日付」、「F列:開始」、「G列:終了」、「H列:ゲスト」、「I列:詳細(カレンダーのメモに記載したい内容)」をリスト化しています。
※リストが「D54:I154」と中途半端なセルになっているのは、他のセルでプルダウン方式で予定を入れ、その内容を「D54:I154」にまとめるように関数を組んでいるためです。

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

エラーメッセージ エラー Exception: The parameters (String,String,String,(class)) don't match the method signature for CalendarApp.Calendar.createEvent.  (匿名)        @ CreateSchedule.gs:19 CreateSchedules @ CreateSchedule.gs:12 ### 該当のソースコード 19行目 calendar.createEvent(title, start, end, { 12行目 schedules.forEach(function(schedule) { を記載しています。 念のためにコードの全文載せておきます。↓ function CreateSchedules() { // スプレッドシートを取得する var sheet = SpreadsheetApp.getActiveSpreadsheet(); // 予定の情報を取得する var schedules = sheet.getRange("D54:I154").getValues(); // カレンダーを取得する var calendar = CalendarApp.getCalendarById("自分のGoogleアカウント"); // 予定を追加する schedules.forEach(function(schedule) { var title = schedule[0]; var start = schedule[1] + "T" + schedule[2]; var end = schedule[1] + "T" + schedule[4]; var guests = schedule[5]; var description = schedule[6]; calendar.createEvent(title, start, end, { guests: guests.split(","), description: description, }); }); } ### 試したこと 同様な質問をされている方も多くおられて、そこの回答通りにソースを変更してみましたが変わらずエラーが出てしまいます。

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

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

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

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

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

YellowGreen

2023/11/17 21:59 編集

見て気になったのは、 1) schedule[3]がないことです。 schedule[6] ?? G列が抜けてしまっています。 2) それを修正した上で、 startとendは、 右辺をnew Date(...)の...の部分に日付と時刻を示す文字列として入れないと 日付オブジェクトにならず文字列のままです。 |これは、エラーメッセージでも指摘されています。 |(string, date, date, object)として渡すことを求められます。 このため、 E列からG列のセルの値が文字列ではなく日付データになっていると思うので、 そのまま結合すると Sat Nov 18 2023 00:00:00 GMT+0900 (Japan Standard Time)T...のような文字列になるので、 それぞれを 2023/11/18 や 09:00 のような日時の文字列とするために 画面表示のまま値を取得します。 var schedules = sheet.getRange("D54:I154").getValues(); を var schedules = sheet.getRange("D54:I154").getDisplayValues(); にした上で、 var start = schedule[1] + "T" + schedule[2]; var end = schedule[1] + "T" + schedule[4]; を var start = schedule[1] + " " + schedule[2]; // Tに変えて半角の空白 var end = schedule[1] + " " + schedule[3]; // 同上と4→3 にしてからnew Date(...)の...の部分に入れてみてください。 画面上の日付の表記が2023/11/18でなくて2023-11-18なら T を空白にしなくていいですが、 空白にしておくとどちらの表示でも日付オブジェクトが生成されます。 3) あと、guestsをsplitで配列にされていますが、 カンマ区切り文字列のままでよろしいのではないでしょうか。
YellowGreen

2023/11/17 22:12

上の修正を適用して 次のようになると動作すると思います。 // スプレッドシートを取得する var sheet = SpreadsheetApp.getActiveSpreadsheet(); // 予定の情報を取得する var schedules = sheet.getRange("D54:I154").getDisplayValues(); // カレンダーを取得する var calendar = CalendarApp.getCalendarById("自分のGoogleアカウント"); // 予定を追加する schedules.forEach(function(schedule) { var title = schedule[0]; var start = new Date(schedule[1] + " " + schedule[2]); var end = new Date(schedule[1] + " " + schedule[3]); var guests = schedule[4]; var description = schedule[5]; calendar.createEvent(title, start, end, { guests: guests, description: description, }); });
YellowGreen

2023/11/17 22:21 編集

蛇足で、ご存知かもしれませんが、 // カレンダーを取得する var calendar = CalendarApp.getCalendarById("自分のGoogleアカウント"); は ID が ご自身の Googleアカウントのカレンダーなら var calendar = CalendarApp.getDefaultCalendar(); と ID を指定せずに書けます。
Yutaengineer

2023/11/18 15:11

YellowGreenさん コメントありがとうございます! おかげさまで無事にスクリプトを実行できました。 大変助かりました。ありがとうございます!
guest

回答1

0

自己解決

YellowGreenさんから教えていただいたコードを貼り付け、その後にも何度かエラーコードが出てきましたが、以下のようなコードに変えることで解決しました。

YellowGreenさん今後ともよろしくお願いいたします。


function CreateSchedules() {
// スプレッドシートを取得する
// スプレッドシートを取得する
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = activeSpreadSheet.getSheetByName('シートの名前');

// 予定の情報を取得する
var schedules = sheet.getRange("D55:I154").getDisplayValues();

// カレンダーを取得する
var calendar = CalendarApp.getDefaultCalendar();

// 予定を追加する
schedules.forEach(function (schedule) {
var title = schedule[0];
var start = new Date(schedule[1] + " " + schedule[2]);
var end = new Date(schedule[1] + " " + schedule[3]);
var guests = schedule[4];
var description = schedule[5];

calendar.createEvent(title, start, end, { guests: guests, description: description, });

});}

投稿2023/11/18 15:20

Yutaengineer

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問