【Google Apps Script】大量のシートをバックアップしてから削除する方法【スプレッドシート】
スプレッドシートで日毎にシートを追加して使用している場合、日に日にシートが溜まってスプレッドシートが重くなりますよね。。
今回は月初めに先月のシートをバックアップ(コピーして特定のフォルダに格納)してから、バックアップしたシートを削除するというコードを書いていきます。
尚、シートのタブ名は日付(M/d)で管理している場合のコードです。
function createBackup() {
//【手順①】まずは先月までのシートをバックアップ(コピーして指定フォルダに格納)
//アクティブなスプレッドシートを取得
let ss = SpreadsheetApp.getActiveSpreadsheet();
//ドライブに格納するため上記のスプレッドシートをfileオブジェクトで取得
let file = DriveApp.getFileById(ss.getId());
//先月の日付データの取得
let now = new Date();
let y = now.getFullYear();
let m = now.getMonth();
let lastMonth = new Date(y, m-1, 1);
m = lastMonth.getMonth();
//バックアップのスプレッドシート名を宣言
let fileName = `【バックアップ】${m+1}月分`;
//格納したいドライブのIDを指定
let folder = DriveApp.getFolderById("xxxxxxxxxxxxxxx");
//バックアップ用にスプレッドシートをコピーして指定のフォルダに格納
file.makeCopy(fileName, folder);
//【手順②】先月分のシートを削除
//先月の1日から31日までfor文をまわして、該当シートを削除する
for (let i = 1; i <= 31; i++) {
let sheet = ss.getSheetByName(`${m + 1}/${i}`);
if (sheet) {
ss.deleteSheet(sheet);
}
}
}
注意点としては、手順②の先月分のシートを削除する際に、
1日から31日までfor文をまわしているのですが月によっては31日もない場合があるので
更にif文でシートが存在している場合に削除するようにコードを書く必要があります。
【Google Apps Script】年が変わっても対応できる日付の取得方法
年が変わっても対応できる日付の取得方法
let now = new Date();
let y = now.getFullYear();
let m = now.getMonth();
ここで注意しなければならないのが、getMonthメソッド。
月の情報を取得できるのだが、1-12月は[0-11]に対応している。
つまり、1月なら[0]であり9月なら[8]となる。
もし今が2022年1月1日で先月の12月を取得して表示させたい場合は、
以下のようにgetFullYear()で取得した情報をnew Date()に入れてあげることで
年を跨いでも日付を取得することが可能になる。
let now = new Date(); //現在日時を取得(2022/1/1)
let y = now.getFullYear();
let m = now.getMonth();
let lastMonth = new Date(y, m-1, 1);
console.log(lastMonth); //12月の情報を表示