LoginSignup
1
1

More than 5 years have passed since last update.

gasでスプレッドシートに営業日を挿入したシートを作成

Last updated at Posted at 2019-02-18

やりたかったこと

下の画像(月次の営進捗管理的なやつ)の黄色い箇所に平日のみ日付をいれたシートを毎月作成したい。

スクリーンショット 2019-02-11 14.57.21.png

コード

qiita.gs
function createSheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet(); 
  var sheetName = sheet.getSheetName();
  var reg = /\(.+?\)/;
  var name = sheetName.match(reg);
  var index = sheet.getIndex();
  var templateSheet = ss.getSheetByName('テンプレート');
  var m = Moment.moment();
  var year = m.format("YYYY");
  var month = m.format("MM");
  var newSheet = ss.insertSheet(month + "" + name, index + 2,{template: templateSheet});

  var endDay = Moment.moment(year+"-"+month, "YYYY-MM").daysInMonth();
  var calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
  var calendar = CalendarApp.getCalendarById(calendarId);

  var counter = 2;
  for (var i = 1; i <= endDay; i++) {
    var day = new Date(year,month - 1,i);
    var dayOfWeek = day.getDay();
    var todayEvents = calendar.getEventsForDay(day);
    if (dayOfWeek == 0 || dayOfWeek == 6 || todayEvents.length == 1){
      continue;
    } else {
      if (dayOfWeek % 5 == 0) {
        newSheet.getRange(counter, dayOfWeek += 1).setValue(month + "/" + i);
        counter += 6;
      }  else {
        newSheet.getRange(counter, dayOfWeek += 1).setValue(month + "/" + i);
      }
    }
  }
}

テンプレートは非表示にして、「図形描画」でシートを作成ボタンを挿入。
ボタンにスクリプトを割り当てる。

できた..けど...

スクリーンショット 2019-02-18 18.53.29.png

欲を言えば

・自分が管理しているのでシート作成ボタンを他の人が押すことは無いが、誰が押しても順番が変わらないようにしたい
・↑ほんとはトリガーで自動作成したい(どうやって3人分ののシートを取得するかが分からなかった)
・最初の1月も自動で作成したい
・繰り返し処理がもっとスマートに書けんもんかね、、、

アドバイスいただけたら助かります!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1