Googleスプレッドシートで、例えば50個のシートがある場合に、Google Apps Script(GAS)を使って一気に削除します。
GASでシートを削除するには
シートを削除するには「.deleteSheet(“シート名”)」を使います。
まずは、getSheetByNameでシート名を取得して、その後、取得した変数で削除を実行します。
function deleteSheet() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const delSheet= ss.getSheetByName("1");
ss.deleteSheet(delSheet);
}
実行すると、いつものように承認画面が出てくるので、権限を与えます。
シートが削除されました!
シートを一気に削除する
シートを一気削除する場合は、ループ文でまわします。
function addNewSheet() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const newSheet = ss.insertSheet();
newSheet.setName(1);
}
シートが追加されました!
ループでまわす
あとは、シートをループで次々に作成していきます。50までは欲しいので、ループは「51より小さい」としています。
function deleteSheet() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheets = ss.getSheets();
for(let i=0; i<sheets.length; i++) {
sheetName = sheets[i].getSheetName();
ss.deleteSheet(delSheet);
}
}
実行してみます。
エラーが出ました。
Exception: The parameters (String) don't match the method signature for SpreadsheetApp.Spreadsheet.deleteSheet.
deleteSheet @ 削除.gs:6
例外です。パラメータ (String) が SpreadsheetApp.Spreadsheet.deleteSheet のメソッドシグネチャにマッチしません。…。
getSheetByNameでシート名を取得する方法に変更してみます。
function deleteSheet() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheets = ss.getSheets();
for(let i=0; i<sheets.length; i++) {
const sheetName = sheets[i].getSheetName();
const delSheet= ss.getSheetByName(sheetName);
ss.deleteSheet(delSheet);
}
}
シートが次々に削除されていきます。
エラーが出ました…。
Exception: ドキュメント内のシートをすべて削除することはできません。
deleteSheet @ 削除.gs:7
Googleスプレッドシートはシートを空にすることができないのでエラーが出たようです。最後の1つが残りました。
もし特定のシートを残す場合は、ループの段階で何かひと工夫を入れておくと良さそうです。
まとめ
このような感じで、GASを使ってシートを一気に削除することができました。
続きは、また。