Google Apps Script(GAS)でGoogle Sheet(スプレッドシート)にて新規シートを追加する方法についてさくっと解説します。名前がかぶっているシートがある場合は、上書きしてSheetの変数を返答するところまでコード化しています。コピペで使えるサンプルコード付き:やさしくGASに入門するシリーズ
ご挨拶
ども!Google Apps Script(GAS)使っていますか?プロジェクト外のお仕事で、GASを使った自動化に取り組んでいた龍ちゃんです。ほんのちょっとしたことを自動化するのに、GASは最適な選択肢だと思います。よく使うシナリオとしては、GASでデータを取得してスプレッドシートにまとめるになります。その過程で、スプレッドシートの作成やシートの操作というのをよくやります。
前回は、シート内のセルの操作という観点に注目してまとめていました。ちょっと癖がありますが、一度覚えてしまえば結構便利なツールに大変身します。今回もGASとスプレッドシートのお話になります。
キホンのサンプルはすべて、公式のリファレンスに乗っています。戦える元気のある方は、こちらを隅から隅まで読んでみるのもアリだとは思います。慣れればこちらのほうが早いですが、元気のない方はようこそ( *´艸`)
今回取り扱うシナリオとしては以下になります。
- スプレッドシート内で、新規シートを作成したい
- 同一のシートがある場合は、新しく作り直したい
詰まる部分があったとするならば、同一のシート名にしようとしてエラーが吐かれたぐらいですかね。
Exception: シート名「****」はすでに存在しています。別の名前を入力してください。
最後のほうに、使いまわせる「新規シート作成:同盟シート削除機能付き」のサンプルコードを載せています。
それでは本題です。
新規シート作成
コマンドとしては、以下になります。
const sheetId = "xxxxxxxxxxxxxxxxxxxxxxxxxx"
const file = SpreadsheetApp.openById(sheetId)
const newSheet = file.insertSheet() //新規作成
newSheet.setName("test") // 名前変更
上のコードを実行してみると、対象のスプレッドシートに「test」というシートが作成されるかと思います。最後の行の「newSheet.setName("test")
」を削除して実行すると、自動でナンバリングされたシートが生成されます。
上記のコードの問題点と解決策
さて、先ほどのコードは問題があります。コピペしたコードを二度走らせると、以下のエラーが表示されるかと思います。
画面の通りなのですが、同盟のシートを保存することができません。
使用するシナリオによると思うのですが、エラー回避を行うためにシート名が既に使われているかどうかを判定する必要があります。そのためのコードが以下になります。
const isSheetExist = file.getSheetByName(name)
if (isSheetExist) {
// シートがある場合の処理
}else{
// シートがない場合の処理
}
これは、シートを取得する際に使用します。ここに存在しないシート名を入力すると、undefindが返答されます。これによってシートがある場合とない場合の処理を振り分けることができます。
ちなみにですが、シートの削除は以下のコードで行うことができます。
const sheetId = "xxxxxxxxxxxxxxxxxxxxxxxxxx"
const file = SpreadsheetApp.openById(sheetId)
const sheet = file.getSheetByName(name)
file.deleteSheet(sheet) // シート削除
シートの削除は、存在しているシートを指定する必要があります。
既存のシートを削除して新規作成するサンプルコード
それでは、サンプルコードを置いておきます。
const createSheet = (sheetId, name) => {
const file = SpreadsheetApp.openById(sheetId)
const newSheet = file.insertSheet() // sheetの作成
const isSheetExist = file.getSheetByName(name) // sheet名の取得
if (isSheetExist) {
file.deleteSheet(isSheetExist) // sheetの削除
}
newSheet.setName(name) // sheet名の変更
return { sheet: file.getSheetByName(name) }
}
const sheetId = "xxxxxxxxxxxxxxx"
const { sheet } = createSheet(sheetId, "test")
createSheet
にsheetIdと設定したい名前を渡すことで、既存のシートを削除して新規作成したシートを返答してくれます。
こちらのコードは汎用度合いが高いと思うので、是非自分のメモに追加しておきましょう。
終わりに
ども!このコードは僕自身、使いまわしています。データ取得の自動化周りをする際には、必須レベルです。
プログラミング全般に言えることですが、細やかなTipsはいっぱいあります。それを組み合わせて使用することが難しいです。特定のシナリオに限定して使うことができるコピペコードを量産していきたいと思います。
それではまた!!