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

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

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

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

Q&A

解決済

1回答

634閲覧

GASでカレンダーからデータ引用したスプレッドシートに通し番号をつけたい

easter

総合スコア12

Google Apps Script

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

0グッド

0クリップ

投稿2018/11/30 07:17

編集2018/11/30 08:32

実現したいこと

ノンプログラマーなので知識がほぼないのですが、
カレンダーから吸い上げた情報に通しで連番をつけたいです。

社内共有カレンダーで予約されている会議室の状況を毎日0時に吸い上げて
スプレッドシートに入力するGASを組んでいるのですが、
全体を通して番号をセットするやり方がわからず困っています。
できれば、(201812-1,201812-2,...)みたいに年月と通し番号で管理したいです。

発生している問題

その日吸い上げた複数の予約には通し番号をつけられたのですが、
全体を通した番号というのが付けられないので困っています…

該当のソースコード

/* カレンダーからその日のイベントすべてを取得してスプレッドシートに書き出す */ function getCalendar() { var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得 var RANGE = mySheet.getDataRange().getLastRow()+1; //新規行番号を取得 var FORMAT_TIME = 'mm/dd'; // 時間表記 var no=1; //No var myCal=CalendarApp.getCalendarById('カレンダーID'); //特定IDのカレンダーを取得 var schedules = myCal.getEventsForDay(new Date()); //予定オブジェクトの生成 // 予定を繰り返し出力する for(var index = 0; index < schedules.length; index++) { var range = RANGE + index; // IDを出力 mySheet.getRange(range, 1).setValue(no), // カレンダー名を出力 mySheet.getRange(range, 2).setValue(myCal.getName()), // 予定名を出力 mySheet.getRange(range, 3).setValue(schedules[index].getTitle()), // 予約日を出力 mySheet.getRange(range, 4).setValue(schedules[index].getStartTime()).setNumberFormat(FORMAT_TIME), // 説明欄を出力 mySheet.getRange(range, 5).setValue(schedules[index].getDescription()), // 部屋を出力 mySheet.getRange(range, 6).setValue(schedules[index].getLocation()), ]) no++; } } // end function

試したこと

下記のスクリプトは先人のブログを参照させて頂いたものですが、
スプレッドシートに通し番号を入れる以下のスクリプトを入れるとしたら、
どこに挿入するべきなのでしょうか?

for (var i=1;i<=10;i++){  mySheet.getRange(i,1).setValue(i);  } }

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

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

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

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

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

macaron_xxx

2018/11/30 07:51 編集

appendrowとsetValueという謎の動きをしていますね…。
easter

2018/11/30 07:52

えっ、そうなんですか!? どう直せば良いのでしょうか…
easter

2018/11/30 08:05

appendRowを外して、 var num_row = mySheet.getDataRange().getLastRow()+1; に直してみました
papinianus

2018/11/30 08:09

ご自身がプログラムの意味を説明できないならば、まず、先人のブログを開示してください。
papinianus

2018/11/30 08:19 編集

appendRowとsetValueではどうしようもないですが、どの程度書けば分かりますか? 直してみた内容は、質問に追記してください。
easter

2018/11/30 08:33

質問の修正で直してしまいました。上記の内容を変更しています。
papinianus

2018/11/30 08:40

これ動かして試してますか?動かないようにしか思えないのですが。
guest

回答1

0

ベストアンサー

できるだけ既存コードを生かした、実装イメージ(動作確認してない)
(ちゃんとやりたかったら外部委託をご検討ください。というのもシートが空だったらどうするのとか、月や年がかわったらどうするのとかそういうのちゃんとやるには仕様から練らないといけないからです)

javascript

1function getCalendar() { 2 3 var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得 4 var num_row = mySheet.getDataRange().getLastRow(); //新規行番号を取得 5 var FORMAT_TIME = 'mm/dd'; // 時間表記 6 7 var no=1; //No 8 9 var myCal=CalendarApp.getCalendarById(''); //特定IDのカレンダーを取得 10 var schedules = myCal.getEventsForDay(new Date()); //予定オブジェクトの生成 11 12 var cur = (num_row == 0) ? (new Date()).getFullYear() + "" + ((new Date()).getMonth() + 1) + "-1" : mySheet.getRange(num_row, 1).getValue(); 13 // 予定を繰り返し出力する 14 for(var index = 0; index < schedules.length; index++) { 15 var no = getNext(cur); 16 mySheet.appendRow([no, myCal.getName(), schedules[index].getTitle(), schedules[index].getStartTime(),schedules[index].getDescription(), schedules[index].getLocation()]); 17 cur = no; 18 mySheet.getRange(++num_row, 4).setNumberFormat(FORMAT_TIME); 19 } 20 21 } 22 function getNext(current) { 23 var splitted = current.split('-'); 24 var next = Number(splitted[1]) + 1; 25 return splitted[0] + "-" + next; 26 }

投稿2018/11/30 08:33

編集2018/11/30 09:05
papinianus

総合スコア12705

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

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

easter

2018/11/30 08:39

ご回答、誠にありがとうございます。 一回テスト環境で実装してみて、いろいろ試してみます。
papinianus

2018/11/30 08:41

動かしてから、ベストにしたほうがいいですよ。試してないので。 最低でも、getValueが理解していただけないことには、質問者様のやりたいことは不可能です。
macaron_xxx

2018/11/30 08:50

>easterさん 動かない罠が含まれているので、頑張って勉強して直してくださいね!
easter

2018/11/30 08:58

頑張ります…!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問