Google Apps Script(GAS)でスプレッドシートを新規シート作成

Google Apps Script GAS スプレッドシートを新規作成 サンプルコード付き

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")」を削除して実行すると、自動でナンバリングされたシートが生成されます。

上記のコードの問題点と解決策

さて、先ほどのコードは問題があります。コピペしたコードを二度走らせると、以下のエラーが表示されるかと思います。

Exception: シート名「****」はすでに存在しています。別の名前を入力してください。

画面の通りなのですが、同盟のシートを保存することができません。

使用するシナリオによると思うのですが、エラー回避を行うためにシート名が既に使われているかどうかを判定する必要があります。そのためのコードが以下になります。

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はいっぱいあります。それを組み合わせて使用することが難しいです。特定のシナリオに限定して使うことができるコピペコードを量産していきたいと思います。

それではまた!!

 



ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です