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

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

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

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

Google カレンダー

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

Q&A

解決済

1回答

986閲覧

GASでGoogleカレンダー一括登録にイベント説明(description)が反映されない

mmyk

総合スコア2

Google スプレッドシート

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

Google カレンダー

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

0グッド

0クリップ

投稿2020/07/27 06:45

前提・実現したいこと

スプレッドシートから一括でイベント登録したいのですが、説明(「説明を追加」の欄)に追加できません。

「undefined」になっているようで、値が引用できないようです。

解決策をご教示頂けませんでしょうか?
当方GAS初心者です。

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

追加されたイベントの説明欄に何も入っていません。

該当のソースコード

GAS

1//予定を作成する関数 2function CreateSchedule() { 3 var ss = SpreadsheetApp.getActiveSpreadsheet(); 4 var slist = ss.getSheetByName('一覧'); 5 var lastrow = slist.getLastRow(); 6 7 //予定一覧・カレンダー名・カレンダーID 8 var contents = slist.getRange(2, 1, lastrow, 11).getValues(); 9 var calendar = CalendarApp.getCalendarById('') 10 11 //順に予定を作成 12 for(i = 0; i <= lastrow - 2; i++) { 13 14 //登録フラグが「〇」になっていたら登録しない 15 if (contents[i][0] == '〇') { 16 }else if(contents[i][0] == '') { 17 18 //予定のコンテンツを取得 19 var eventday = new Date(contents[i][9]); 20 var starttime = new Date(contents[i][10]); 21 var description = contents[i][12]; 22 23 //予定日をフォーマットして格納 24  var y = eventday.getFullYear(); 25  var m = eventday.getMonth(); 26  var d = eventday.getDate(); 27 28    //開始時刻をstartへ格納 29    var H = starttime.getHours();//starttimeの時間を取得してHへ格納 30    var M = starttime.getMinutes();//starttimeの時間を取得してMへ格納 31    var S = starttime.getSeconds();//starttimeの時間を取得してSへ格納 32    var start = new Date(y,m,d,H,M,S); //日付データに整形 33 34  //コース別         35    if(contents[i][3].match(/S/)) { //終了時刻をendへ格納 36 var end = new Date(y,m,d,H+1,M,S); 37 }else if(contents[i][3].match(/S/)){ 38 var end = new Date(y,m,d,H+2,M,S);  39   } 40   //イベント名生成 41 var title = contents[i][4]+'-'+contents[i][5] 42 43    //イベントの色指定 44 if(contents[i][3].match(/家族/)) { 45 var color = '10'} //Green 46    else if (contents[i][3].match(/友人/)) { 47 var color = '9'} //Blue 48 49 //予定を作成 50 var event = calendar.createEvent(title, start, end, //予約作成 51 {description: description 52 }); 53 event.setColor(color) 54 } 55 56 //予定が作成されたら「〇」にする 57 slist.getRange(i + 2, 1).setValue('〇'); 58 59 } 60 } 61}

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

descriptionで指定したセルには、
「当日弁当持参」
「小学四年生3名」
「【大人3名】」
などGmailから抽出した文字列が入っています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

元の表を見せてもらえないので実験できませんが、descriptionを得る時点でインデックスの指定が間違っています(あるいは、それより前のgetRangeの指定範囲が間違っています)。

GAS

1var contents = slist.getRange(2, 1, lastrow, 11).getValues(); 2(中略) 3var description = contents[i][12];

2行目以降の各行の1列目から11列分の内容がcontentsに格納されます。contentsのインデックスは0オリジンなので、contents[i][0]からcontents[i][10]までしかありません。

まあ、どこのセルに説明が書かれているか、回答者には知りようがないのでこのへんで。

投稿2020/07/27 07:28

Daregada

総合スコア11990

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

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

mmyk

2020/07/29 01:09

ありがとうございます。 初歩的な間違いでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問