やりたかったこと
下の画像(月次の営進捗管理的なやつ)の黄色い箇所に平日のみ日付をいれたシートを毎月作成したい。
コード
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);
}
}
}
}
テンプレートは非表示にして、「図形描画」でシートを作成ボタンを挿入。
ボタンにスクリプトを割り当てる。
できた..けど...
欲を言えば
・自分が管理しているのでシート作成ボタンを他の人が押すことは無いが、誰が押しても順番が変わらないようにしたい
・↑ほんとはトリガーで自動作成したい(どうやって3人分ののシートを取得するかが分からなかった)
・最初の1月も自動で作成したい
・繰り返し処理がもっとスマートに書けんもんかね、、、
アドバイスいただけたら助かります!