![見出し画像](https://assets.st-note.com/production/uploads/images/37334586/rectangle_large_type_2_b8f9980e3e50bb5de5c8793fb09d5762.jpg?width=1200)
【GAS】Google Apps Script 活用事例 シート名が変わっても大丈夫。常に最新のシートを取得するスクリプト
先日、GASを書いていて、いきなりスクリプトが動かなくなって、気付いたらシート名が変わっていたんですね。そこで、下記のようなツイートをしたところ、エトー先生が、こんなの前に書いたよと教えてくれました。
マジ、ブッコロだよ。誰だよ、シート名をしれっと変えたヤツ
— ⅡBASA (@nepia_infinity) October 22, 2020
なんか、つじけと一緒にシートのURL から、シートを特定する関数書いたよね?
— etau (@etau0422) October 22, 2020
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
実務ではまだ、使用していないのですが、これすごいな.....と。
どこが凄いのかというと.....。
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が同じかを確かめた上で、返すという感じです。
しかし、まぁ......シート名を無闇矢鱈に変えない。というルールを定めて、運用していく。それが一番です。
俺は社内のリテラシーあげる方に注力するから、このコード使ったことないぞwww
— etau (@etau0422) October 22, 2020
過去にこんな記事を書いています。
この記事が気に入ったらサポートをしてみませんか?