LANG SELRCT

コードを書く場所についてはこちら

2018年4月2日月曜日

オブジェクト内の順番を配列で指定してシートに書き出す


オブジェクトの中身を指定した順番でシートに書き出したい

このようなオブジェクトがあって
var obj = {
  "IoT": "Internet of Things",
  "www": "World Wide Web",
  "html": "HyperText Markup Language"
};


このようにシートに書き出したい



コード1.gs
var obj = {
  "IoT": "Internet of Things",
  "www": "World Wide Web",
  "html": "HyperText Markup Language"
};

var order = [
  "html",
  "IoT",
  "www"
];

function set_values_to_sheet() {
  var ss_url = "URL";
  var sh = SpreadsheetApp.openByUrl(ss_url).getSheets()[0];
  var last_row = sh.getLastRow();
  var start_row = last_row + 1;
  var start_col = 1;
  var num_rows = 1;
  var num_cols = order.length;
  var range = sh.getRange(start_row, start_col, num_rows, num_cols);
  set_values_order(range);
}

function set_values_order(range){
  var array = [];
  for(var i = 0; i < order.length; i++){
    array.push(obj[order[i]])
  }
  array = [array];
  range.setValues(array); 
}
意訳
オブジェクトを用意する





オブジェクトのキーと同じ文字列を配列に入れる(この順番でシートに書き出す)





この機能がやること
スプレッドシートのURL
先頭のシートを取得
データが入っている最終行を取得して
最終行の次の行で
1列目から
1行分
列数はorder配列の要素の数で
範囲を取得して
set_values_orderに渡す;


この機能がやること
配列の入れ物を用意して
orderの要素の数だけ以下を繰り返す
objのorderの順番で値をarrayに追加する

arrayを二次元配列にして
シートに値を入力する



補足


ちなみに
配列で順番を決めずに書き出してみるとこうなる
この順番を思い通りにしたくて配列で順番を指定してやるコード1.gsを書きました



コード2.gs
var obj = {
  "IoT": "Internet of Things",
  "www": "World Wide Web",
  "html": "HyperText Markup Language"
};

var order = [
  "html",
  "IoT",
  "www"
];

function set_values_to_sheet() {
  var ss_url = "URL";
  var sh = SpreadsheetApp.openByUrl(ss_url).getSheets()[0];
  var last_row = sh.getLastRow();
  var start_row = last_row + 1;
  var start_col = 1;
  var num_rows = 1;
  var num_cols = order.length;
  var range = sh.getRange(start_row, start_col, num_rows, num_cols);
  set_values(range);
}

function set_values(range){
  var array = [];
  var keys = Object.keys(obj);
  for(var i = 0; i < keys.length; i++){
    array.push(obj[keys[i]])
  }
  array = [array];
  range.setValues(array); 
}
意訳
オブジェクトを用意する





オブジェクトのキーと同じ文字列を配列に入れる(この順番でシートに書き出す)





この機能がやること
スプレッドシートのURL
先頭のシートを取得
データが入っている最終行を取得して
最終行の次の行で
1列目から
1行分
列数はorder配列の要素の数で
範囲を取得して
set_valuesに渡す


この機能がやること
配列の入れ物を用意して
objのキーを取得して
そのキーの数だけ以下を繰り返す
objのキーの値をarrayに追加する

arrayを二次元配列にして
シートに値を入力する



縦に書き出したい場合


縦に書き出すとこうなる



コード3.gs
var obj = {
  "IoT": "Internet of Things",
  "www": "World Wide Web",
  "html": "HyperText Markup Language"
};

var order = [
  "html",
  "IoT",
  "www"
];

function set_values_to_sheet() {
  var ss_url = "URL";
  var sh = SpreadsheetApp.openByUrl(ss_url).getSheets()[0];
  var last_row = sh.getLastRow();
  var start_row = last_row + 1;
  var start_col = 1;
  var num_rows = order.length;
  var num_cols = 1;
  var range = sh.getRange(start_row, start_col, num_rows, num_cols);
  set_values_order(range);
}

function set_values_order(range){
  var array = [];
  for(var i = 0; i < order.length; i++){
    array.push([obj[order[i]]])
  }
  Logger.log(array)
  range.setValues(array); 
}