【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月の情報を表示