スプレッドシートの全シートURLを取得する
スプレッドシートに多くのシートを作成している場合に「全シートURLを一気に抽出してリンクにしたい」という時に使える方法です。
シート情報を取得する
まずは、スプレッドシートの情報と、シートの情報を取得します。
function get_sheetURL() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const spreadsheetID = ss.getId();
const sheets = ss.getSheets();
let sheetId = "";
let sheetName = "";
let url = "";
}
getIdでスプレッドシートのID、getSheetsで全シートのオブジェクトを取得できます。他の変数は次で使用するために作成をしておきます。
ループでURLを取得する
あとは、ループでシート名とシートIDを取得していきます。getSheetIdでシートのIDが取得できますので、URLにつなぎます。
for(let i=0; i<sheets.length; i++) {
// シート名
sheetName = sheets[i].getSheetName();
// シートID
sheetId = sheets[i].getSheetId();
// URL作成
url = "https://docs.google.com/spreadsheets/d/" + spreadsheetID + "/edit#gid=" + sheetId;
}
完成です!実行してみます。
シートのURLが取得できました!
[rml_read_more]
列に書き込む
あとは、1列目、2列目などにループで内容を書き込んでいきます。getSheetByName(name);でシート名に直接アクセスできますので、あとはレンジとgetValueで書き込んでいきます。
for(let i=0; i<sheets.length; i++) {
sheetName = sheets[i].getSheetName();
sheetId = sheets[i].getSheetId();
url = "https://docs.google.com/spreadsheets/d/" + spreadsheetID + "/edit#gid=" + sheetId;
Logger.log(url);
ss.getSheetByName("MENU").getRange(i+1,1).setValue(sheetName);
}
getRangeの行数に1を足しておかないと範囲外でエラーになりますので、足しておきます。
出てきました!
ss.getSheetByName("MENU").getRange(i+1,1).setValue(sheetName);
ss.getSheetByName("MENU").getRange(i+1,2).setValue(url);
まとめ
これで、スプレッドシートの全シートURLを取得してスプレッドシートに書き込むことができました。便利ですね!