スプレッドシートのURLを渡してシートIDからシートを取得して返す例です
このようなスプレッドシートのURLがあって
var ss_url = https://docs.google.com/spreadsheets/d/スプレッドシートID/edit#gid=シートID
"gid=" で区切ったときの後半部分のシートIDを取得する
var sh_id = ss_url.split("gid=")[1];
以下のコード.gsスプレッドシートURLを設定して
get_sheet_by_url() を実行すると
対象シートのA1の値がログに出ます
コード.gs
function get_sheet_by_url() { var ss_url = "スプレッドシートURL"; var sheet = get_sheet(ss_url); Logger.log(sheet.getRange("A1").getValue()); } function get_sheet(ss_url) { var ss = SpreadsheetApp.openByUrl(ss_url); var sh_id = ss_url.split("gid=")[1]; var shs = ss.getSheets(); for (var i = 0; i < shs.length; i++) { if (shs[i].getSheetId() == sh_id) { break; } } var sheet = ss.getSheets()[i]; return sheet; } |
処理をまとめて書いてsheetを返す例
コード2.gsfunction getTargetSheet() { var ss_url = "https://docs.google.com/spreadsheets/d/スプレッドシートID/edit#gid=シートID"; var ss = SpreadsheetApp.openByUrl(ss_url); var sheet_id = ss_url.split("gid=")[1]; var sheets = ss.getSheets(); for (var i = 0; i < sheets.length; i++) { if (sheets[i].getSheetId() == sheet_id) { break; } } var sheet = ss.getSheets()[i]; return sheet; } |
厳密等価演算子(===)でやる場合
var sheetId = sheetUrl.split("gid=")[1];
はstringで返ってくるので、parseIntで整数値にする。
なぜ?
if (sheets[i].getSheetId() === parseInt(sheetId)) {
で数値同士で比較できるようにするため。
コード3.gsfunction getTargetSheet() { var sheetUrl = "https://docs.google.com/spreadsheets/d/スプレッドシートID/edit#gid=シートID"; var ss = SpreadsheetApp.openByUrl(sheetUrl); var sheetId = sheetUrl.split("gid=")[1]; var sheets = ss.getSheets(); for (var i = 0; i < sheets.length; i++) { if (sheets[i].getSheetId() === parseInt(sheetId)) { break; } } var sheet = ss.getSheets()[i]; return sheet; } |