見出し画像

【GAS】Google Apps Script 活用事例 シート名が変わっても大丈夫。常に最新のシートを取得するスクリプト

先日、GASを書いていて、いきなりスクリプトが動かなくなって、気付いたらシート名が変わっていたんですね。そこで、下記のようなツイートをしたところ、エトー先生が、こんなの前に書いたよと教えてくれました。

function spreadsheet() {
 
 const url   = 'https://docs.google.com/spreadsheets/d/15h9_v-GrwJKfaUeCBNhKp7MZ6pt5BIDQkVB3084VtCM/edit#gid=1975847693';
 const sheet = getSheetByUrl_(url);
 
 console.log(sheet.getName());
 
}


function getSheetByUrl_(url) {
 
 const ss      = SpreadsheetApp.openByUrl(url);
 const sheets  = ss.getSheets();
 
 console.log(url.split('#gid='));
 
 
 //シートIDを、文字列から数値に変換する
 const sheetId = Number(url.split('#gid=')[1]);
 
 //前述のsheetIdが、型も含めて完全一致したときに、sheetをオブジェクトとして返す。
 for (const sheet of sheets) {
   if (sheetId === sheet.getSheetId()) return sheet;
 }//for
}//end

実務ではまだ、使用していないのですが、これすごいな.....と。

どこが凄いのかというと.....。

スクリーンショット 2020-10-24 10.41.07

URLが、こんな感じであったとして、

url.split('#gid=')[1] 

上記の部分で、文字列として取得したURLを、配列に分離しています。文字列に含まれている / や , とかスペースで使うケースが多い気がします。

Twitter APIで使ったケースでは、文字列に含まれているスペースを元に配列に変換しています。

const date         = new Date(tweet.created_at);
const formatedDate = Utilities.formatDate(date, 'Tokyo/Asia', 'yyyy/MM/dd E HH:mm');
let tweetContents  = formatedDate.split(' ');

スプレッドシートで使うとこんな感じ。

'1975847693' から分かるように文字列です。これをNumberで数値型に変換しています。

Number(url.split('#gid=')[1]);

/*
 (例)
 [ 'https://docs.google.com/spreadsheets/d/15h9_v-GrwJKfaUeCBNhKp7MZ6pt5BIDQkVB3084VtCM/edit',
 '1975847693' ]
 
 */

数値型のSheet IDと、for ofで取得したSheet IDが同じかを確かめた上で、返すという感じです。

しかし、まぁ......シート名を無闇矢鱈に変えない。というルールを定めて、運用していく。それが一番です。

過去にこんな記事を書いています。


この記事が気に入ったらサポートをしてみませんか?