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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

370閲覧

カレンダーから取得した予定を特定の単一セルにセットしたい

bin.

総合スコア2

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/04/26 09:29

編集2022/04/28 01:54

1.カレンダーから当日の予定を取得し、特定の単一セルにセットしたい

2.値がセットされない ログに”Range”と表示される

//カレンダーから予定を取得し日報作成 ※土日、祝日一覧のぞいて作成 function daily_mail2() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("日報FMT"); //toの取得 var range = sheet.getRange("C2"); var to = range.getValue(); //ccの取得 var range = sheet.getRange("C3"); var cc = range.getValue(); //subjectの取得 var range = sheet.getRange("C4"); var subject = range.getValue(); //当日すべてのイベントが格納されてる箱 var values = [time,title];   //イベントの取得  var calendar = CalendarApp.getCalendarById("カレンダーID");  var date = new Date();  var events = calendar.getEventsForDay(date);  var length = events.length;  //繰り返し処理  for (var i=1 ; i<length ; ++i){     var event = events[i];         var title = event.getTitle();      var start = event.getStartTime();                 //eventのスタート時間の取得   start = Utilities.formatDate(start,"Asia/Tokyo","HH:mm");    var end = event.getEndTime();                  //eventのエンド時間の取得   end = Utilities.formatDate(end,"Asia/Tokyo","HH:mm");   var time = `${start} - ${end}`                    values.push(time,title) //valuesに取得したデータを格納   }    Logger.log(values); //イベントをスプレッドシートにセット   ここがおかしい?セットされない var daily = sheet.getRange("C5"); var titles = daily.setValue(values);    Logger.log(titles); //bodyの取得 var range = sheet.getRange("C6"); var body = range.getValue(); //optionsの指定 options = { cc:cc } //曜日の取得 var day = date.getDay(); //祝日の取得 var ss = SpreadsheetApp.getActiveSpreadsheet(); var holidaysheet = ss.getSheetByName("祝日一覧"); var holiday = holidaysheet.getDataRange().getValues().slice(1);                                        //今日が土日祝日じゃなかった場合、メールの下書き作成 たぶんここもおかしい if (day != 0, day != 6, holiday != holiday) { GmailApp.createDraft(to,subject,body,options); }else{ return; } }

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

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

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

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

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

k.a_teratail

2022/04/28 00:39

ところどころインデントがおかしいのが気になりますが、コードは一部抜粋でしょうか? それとも、これで全てでしょうか?
bin.

2022/04/28 01:50

すみません、一部抜粋です! 一部だとわかりにくいですよね、、全文記載に修正します! ご指摘ありがとうございますm(_ _)m
guest

回答1

0

ベストアンサー

コードを下記のように修正してみてください。

gs

1//当日すべてのイベントが格納されてる箱 2// var values = [time,title];  3var values = []; // 空の配列を定義 4 5・・・ 6 7// values.push(time,title) //valuesに取得したデータを格納 8values.push(`${time} ${title}`); // 文字列化してデータを格納 9 10・・・ 11 12// var titles = daily.setValue(values); 13daily.setValue(values.join("\n")); // 配列の全要素を順に改行コードで連結し文字列をセット 14//   Logger.log(titles);

1.カレンダーから当日の予定を取得し、特定の単一セルにセットしたい

予定の取得などはできていたので、単一セルにセットするため

  • 配列に追加する時に、文字列として追加
  • セルにセットする時に、配列の要素を改行で区切り文字列化

の変更を入れました。

2.値がセットされない

setValue()の引数に配列を指定していたので、配列の先頭要素しかセットされません。
また、values変数を定義時に、初期化されてない「time」,「title」変数を入れていたので配列内は下記になります。

console.log

1[null, null, 11:00 - 12:00, タイトル2, 12:30 - 13:30, タイトル3, 15:00 - 16:00, タイトル4, 16:30 - 17:30, タイトル5, 19:00 - 20:00, タイトル6, 20:30 - 21:30, タイトル7]

先頭要素(values[0])が「null」なので、スプレッドシートには何も表示されなかったのではないかと思います。
values変数定義時には不要かと思い、変数の定義方法を修正しています。

ログに”Range”と表示される

setValue()を実行時、セットしたかの結果を返すのではなく、Rangeオブジェクトを返すためです。
GAS公式のドキュメント: https://developers.google.com/apps-script/reference/spreadsheet/range#setvaluevalue

値をセット、セットした値を確認するなら、下記のように記載する必要があります。

gs

1daily.setValue(values); 2Logger.log(daily.getValue());

投稿2022/04/28 05:04

k.a_teratail

総合スコア845

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

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

bin.

2022/05/01 05:39

k.a_teratailさま ご返信が遅くなってしまい申し訳ございません>< とてもわかり易く教えていただきありがとうございます! 回答コードを入れて無事解決できました! また、ご丁寧にログ表示の修正点も教えていただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問