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分になったら処理を停止
- 「ここまで」というシートが存在しなかったら、そもそも処理を行わない
- 一括ではないが、様子見ながら断捨離していこう
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。