目的
- 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()
}
とても便利です。
-
URLのttps://docs.google.com/spreadsheets/d/~この部分~/edit ↩