LANG SELRCT

Google Apps Scriptのコードを書く場所  (新規作成: スプレッドシート | スクリプトエディタ

2018年8月9日木曜日

スプレッドシートURLから対象のシートを取得する


スプレッドシートの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.gs
function 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.gs
function 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;
}



最新の投稿

JIRAのAutomation rulesでglobal ruleとmultiple projectsには実行Limitがあるらしい(スタンダードプラン)

JIRAのスタンダードプランの場合 Automation rulesのScopeの設定で、multi-project か global rule だと実行数のLimitにかかる可能性があります。 Single-project なら使用量にカウントされないようです。 Limitにか...