シートの値を取得して連想配列にする
目的
フォームの回答シートのユーザー名を指定したら
slackシートのD列のchannelidの値を返す方法が欲しくて作成しました。
※フォームの回答シートのC列の「ユーザー名」とslackシートのB列の「表示名」は同じ
コード
function channneiIdGet(){
//
//slackシートの値を二次元配列で取得して連想配列にしたい
//B列の表示名をいれればD列のchannneildが表示されるようにしたい
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const slackSheet = spreadSheet.getSheetByName('slack');
const slackLastRow = slackSheet.getLastRow();
var values = slackSheet.getDataRange().getValues();
//2次元配列で取得した値を連想配列にする
//連想配列 slackシートのB列をキー D列を値にする
var Array = {};
for (var i=1; i<slackLastRow; i++){
var slackname = values[i][1]; //B列の i 行目のslack表示名
var channelid = values[i][3] ;//D列の i 行目のslackチャンネルID
Array[slackname] = channelid ;
}
Logger.log(Array["user01"]); //
//フォームの回答シートの最終行のC列の値を取得(ユーザー名)
//ユーザー名を連想配列のキーとして指定し値(channneildを取得する)
const reportSheet = spreadSheet.getSheetByName('フォームの回答 1');
//const reportLastRow = reportSheet.getLastRow();
//②列の最終行から上方向に取得する
var reportlastRow = reportSheet.getRange(reportSheet.getMaxRows(), 3).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
Logger.log(reportlastRow); //
var id = reportSheet.getRange(reportlastRow,3).getValue()
Logger.log(Array[id])
}
実行結果
試した結果
フォームの回答のシートの最終列にXLOOKUPを使うほうが簡単と思っていたが
フォームの回答は行が新しく追加されるためXLOOKUPを追加した列にはならない
連想配列を利用するのが良い
GASでスプレッドシートに関数をいれることで解決できた
https://qiita.com/80syokumotsu/items/a9dee0297a3edbb2e847