大量に増えてしまったスプレッドシートのシートを一括削除するGAS

function deleteSheetsAfterKokoMadeWithTimeLimit() {
  const TIME_LIMIT_MS = 5 * 60 * 1000; // 5分
  const startTime = new Date().getTime();

  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheets = spreadsheet.getSheets();

  // 「ここまで」というシートを探す
  let kokoMadeIndex = -1;
  for (let i = 0; i < sheets.length; i++) {
    if (sheets[i].getName() === "ここまで") {
      kokoMadeIndex = i;
      break;
    }
  }

  // 「ここまで」が見つからない場合、処理を中断
  if (kokoMadeIndex === -1) {
    Logger.log("「ここまで」という名前のシートが見つからなかったため、処理を中断します。");
    return;
  }

  let deletedCount = 0;

  // 「ここまで」の後ろのシートを削除(後ろから削除)
  for (let i = sheets.length - 1; i > kokoMadeIndex; i--) {
    const currentTime = new Date().getTime();
    if (currentTime - startTime > TIME_LIMIT_MS) {
      Logger.log(`処理時間が5分を超えたため中断します。現在 ${deletedCount} 枚削除しました。`);
      return;
    }

    const sheetToDelete = spreadsheet.getSheets()[i]; // 毎回最新のシート一覧を取得
    const sheetName = sheetToDelete.getName();
    spreadsheet.deleteSheet(sheetToDelete);
    deletedCount++;

    Logger.log(`シート「${sheetName}」を削除しました(${deletedCount} 枚目)`);
  }

  Logger.log(`「ここまで」以降のシート(合計 ${deletedCount} 枚)を削除しました。`);
}
  • 「ここまで」というシートより後ろのシートを順番に消す
  • GASは6分の壁があるので、5分になったら処理を停止
  • 「ここまで」というシートが存在しなかったら、そもそも処理を行わない
  • 一括ではないが、様子見ながら断捨離していこう

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事