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

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

ただいまの
回答率

90.35%

  • Google Apps Script

    1070questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 164

easter

score 2

 実現したいこと

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

社内共有カレンダーで予約されている会議室の状況を毎日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);
 } 
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • papinianus

    2018/11/30 17:18 編集

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

    キャンセル

  • easter

    2018/11/30 17:33

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

    キャンセル

  • papinianus

    2018/11/30 17:40

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

    キャンセル

回答 1

checkベストアンサー

+1

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

function getCalendar() {

    var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得
    var num_row = mySheet.getDataRange().getLastRow();  //新規行番号を取得
    var FORMAT_TIME = 'mm/dd';  // 時間表記

    var no=1; //No

    var myCal=CalendarApp.getCalendarById(''); //特定IDのカレンダーを取得
    var schedules = myCal.getEventsForDay(new Date());  //予定オブジェクトの生成

    var cur = (num_row == 0) ? (new Date()).getFullYear() + "" + ((new Date()).getMonth() + 1) + "-1" : mySheet.getRange(num_row, 1).getValue();
    // 予定を繰り返し出力する
    for(var index = 0; index < schedules.length; index++) {
      var no = getNext(cur);
      mySheet.appendRow([no, myCal.getName(), schedules[index].getTitle(), schedules[index].getStartTime(),schedules[index].getDescription(), schedules[index].getLocation()]);
      cur = no;
      mySheet.getRange(++num_row, 4).setNumberFormat(FORMAT_TIME);
    }

  }
  function getNext(current) {
      var splitted = current.split('-');
      var next = Number(splitted[1]) + 1;
      return splitted[0] + "-" + next;
  }

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/30 17:39

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

    キャンセル

  • 2018/11/30 17:41

    動かしてから、ベストにしたほうがいいですよ。試してないので。

    最低でも、getValueが理解していただけないことには、質問者様のやりたいことは不可能です。

    キャンセル

  • 2018/11/30 17:50

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

    キャンセル

  • 2018/11/30 17:58

    頑張ります…!

    キャンセル

  • 2018/11/30 17:58

    直しました。

    キャンセル

同じタグがついた質問を見る

  • Google Apps Script

    1070questions

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