年末も年末とて業務で、Node.jsでJSON APIを作ったり、Google Apps Scriptでデータ取得を自動化したりとしていました。
その中で、頻繁に使っていた、指定したカラムの最終行の番号を返す関数を自作して、結構使えたので、こちらに共有しておきます。
Google Apps Script側で用意されている関数で、シート全体の最終行を取得する事はできるのですが、
指定したカラムの最終行を取得して、番号を返してくれる関数がなかったので、自作しています。
下記がその関数になります。
function researchColumnsEmpty(str){ //A:Aのような形でカラムを指定したら、そのカラムの最終行を取得してくれる。
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetData = sheet.getSheetByName(`シート名`);
var range = sheetData.getRange(str);
var array = range.getValues();
var count=0;
array.forEach(function(arr){
if(arr[0]) count++;
})
return count;
}
この関数では、指定したカラムにある全てのデータを取得後(配列で返ってくる)、イテレータで処理する事で、指定したカラムのデータの数を数えてくれるように処理しました。これにより、実質、最終行を取得する事ができます。
使い方
function setFinalValue(){
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetData = sheet.getSheetByName('シート名');
var url = 'https://high-price-checker.herokuapp.com/finalvalue';
var data = UrlFetchApp.fetch(url);
var finalValueJson = data.getContentText('UTF-8');
var finalValues = JSON.parse(finalValueJson);
var Lastrow = researchColumnsEmpty('E:E'); //自作した関数の呼び出し
var j = 0;
for(i=Lastrow;j<finalValues.finalvalue.length;i++){
var finalValue = finalValues.finalvalue[j];
sheetData.getRange(i,5).setValue(finalValue);
j++;
}
}
最終行を'E:E'のように指定すると、そのカラムEの最終行を取得して、integerで返してくれます。for文と組み合わせる事で、新たに取得してきたデータを指定したカラムの最終行から自動で入力したりできます。