課題
というスプレッドシートのデータをGASで扱いたいとします。
- スプレッドシートの世界では、A列の列数は1
- GASの世界での2次元配列では、A列のindexは0
というのになかなか慣れませんでした。
さらに列数が多いスプレッドシートを扱うときに、「I列って8?9?」みたいな事になるし、
列が増減したときにコードを修正するのも「どこがどこだっけ?」ってなって困りました。
解決策
こんなの当たり前かもしれないし、もっといい方法があるかもしれないのであったら教えてほしいです!
修正前
function columnIndex_before() {
const sheet = SpreadsheetApp.getActive().getSheetByName('xxx');
const data = sheet.getDataRange().getValues();
for (let i=1; i<data.length; i++){
// data[i][0]ってなんだっけ?ってなる。
Logger.log(data[i][0] + ":" + data[i][1] + ":" + data[i][2]);
}
}
修正後
function columnIndex_after() {
const sheet = SpreadsheetApp.getActive().getSheetByName('xxx');
const data = sheet.getDataRange().getValues();
// 列が追加・削除されたときも、ここだけ変えればfor文の中は変更しなくて良くなる
const idIndex = 0;
const nameIndex = 1;
const mailIndex = 2;
for (let i=1; i<data.length; i++){
// コード量は増えるけど認識しやすくなる
Logger.log(data[i][idIndex] + ":" + data[i][nameIndex] + ":" + data[i][mailIndex]);
}
}
実行結果
1:Aさん:a@example.com
2:Bさん:b@example.com
3:Cさん:c@example.com
4:Dさん:d@example.com