スプレッドシートのシートをすべて削除する
スプレッドシートで余計なシートをすべて削除して、新しい任意の名前のシートを作成したいということがある。そのような処理を実現するには、以下のように書けばよい。
function clearSpreadSheet(new_one_sheet_name){
var ss = SpreadsheetApp.getActive()
var sheets = ss.getSheets();//もともとあるシート一覧を取得
ss.insertSheet(new_one_sheet_name);//シートがすべてなくなる場合は削除できないから先にinsertする
for (sheet of sheets){
ss.deleteSheet(sheet);
}
}
new_one_sheet_nameに新しく生成したいシート名を入れれば、そのシートだけが存在するスプレッドシートを生成することができる。しかし、上のプログラムのままだと、グーグルフォームとリンクしているスプレッドシートがある場合にエラーが発生する。それを回避するために、以下のようにフォームとのリンクを解除する処理を追加する。
function clearSpreadSheet(new_one_sheet_name){
var ss = SpreadsheetApp.getActive()
var sheets = ss.getSheets();//もともとあるシート一覧を取得
ss.insertSheet(new_one_sheet_name);//シートがすべてなくなる場合は削除できないから先にinsertする
for (sheet of sheets){
if (sheet.getFormUrl()){
var form = FormApp.openByUrl(sheet.getFormUrl());
form.removeDestination();
}
ss.deleteSheet(sheet);
}
}
シートがグーグルフォームとリンクしている場合、sheet.getFormUrl()
でリンク先のグーグルフォームのURLを取得することができる。あとは、そのURLをもとにFormApp.openByUrl
でフォームを開いて、form.removeDestination()
でリンクを解除できる。