GASでsetValues()
を使っていると、値を参照するときにData[0][5]みたいになってコードが読みづらいですよね。
今回は見栄えのよいデータ参照方法を考えてみました。
例えば下のようなスプレッドシートで人物データを取得する場面を考えてみます。
従来通り、setValues()を使った方法
シンプルにこんな感じでしょうか。
function getData() {
const Sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
const LastRow = Sheet.getLastRow(); // 最終行
const StartCell = 7;
// A7~F17までのデータを取得
const UserValues = Sheet.getRange(`A${StartCell}:F${LastRow}`).getValues();
}
ちなみにUserValues[0]
でデータを取得してみるとこんな感じです。
例えば1行目の涼風青葉さんの名前を参照する場合、UserValues[0][2]
となります。
しかも今回はスプレッドシートのセルを結合しているので、UserValues[0][4]
は空欄になってしまいます。
うーん、使いづらい。。
ちょっとだけ工夫してみた
pythonだと辞書型?GASだと連想配列?
呼び方はわからない(というか興味ない)ですが、少しは使いやすくなりました。
function getData() {
const Sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
const LastRow = Sheet.getLastRow(); // 最終行
let userArr = [];
const StartCell = 7;
for (let i = StartCell; i < LastRow; i++) {
userArr[i - StartCell] = {
idnex: Sheet.getRange(`A${i}`).getValue(), // 番号
flag: Sheet.getRange(`B${i}`).getValue(), // 参加有無
name: Sheet.getRange(`C${i}`).getValue(), // 氏名
address: Sheet.getRange(`D${i}`).getValue(), // メールアドレス
note: Sheet.getRange(`F${i}`).getValue(), // 備考
}
}
}
実際に取得したデータはこんな感じでした。ぱっと見、あまり変わってませんね。
ちなみにさっきと同様userArr[0]
でデータを取ってくるとこんな感じです。
取得データにkeyが付いているので、例えば葉月しずく
を参照したいときは
userArr[1].name
もしくはuserArr[1]["name"]
で取ってこれます。他の項目についても同様です。
name
で名前を指定できるので、ソースコードも少しはわかりやすくなるかもしれない。
一応スプレッドシートの結合部分になる不要データもないので、その辺は心配なし。
結論
好み。
私はsetValues()派
。何故なら楽だから。