LoginSignup
8
10

More than 5 years have passed since last update.

【GAS】スプレッドシート及びシートオブジェクトをキャッシュしつつシートの取得を極限まで簡潔に書く

Last updated at Posted at 2018-03-25

目的

  • APIを叩く回数を減らしてスクリプトを高速化
  • SpreadsheetApp.getActiveSpreadsheet().getSheetByName('hoge')とかいうクソかったるい記述をなくして可読性UP

参考:GASでSpreadsheetを操作する自分的ベストプラクティス

関数

function sht(shtName,bkId) {
  var bk = bkId || 'me'
  if (!this[bk]) {
    this[bk] = {
      'bk' : !bkId ? SpreadsheetApp.getActive() : SpreadsheetApp.openById(bk),
      'sht' : {}
    }
  }
  if (!this[bk].sht[shtName]) {
    this[bk].sht[shtName] = this[bk].bk.getSheetByName(shtName)
  }
  return this[bk].sht[shtName]
}

使い方

第一引数にシート名、第二引数にスプレッドシートのID1を指定してください。
第二引数を省略するとアクティブなスプレッドシート(とそのシート)を取得します。

効果

この関数は一度使用したスプレッドシート及びシートを記憶するので、

var hoge = sht('hoge')
var fuga = sht('fuga')

と書いてもAPIのキックは3回で済みます。また

  • 関数fooは関数barを呼び出す
  • barは単独で使用することがある
  • fooとbarは同じシートを操作する

といった状況の際に余計な気を回す必要がなくなります。

function foo() {
  var hoge = sht('hoge')
  doSomething()
  bar()
}

function bar() {
  //fooでシートhogeを取得している場合はAPIにアクセスしない
  var hoge = sht('hoge')
  doSomething()
}

とても便利です。


  1. URLのttps://docs.google.com/spreadsheets/d/~この部分~/edit 

8
10
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10