I have an array containing 2k elements, gotten from a column in google sheets. Each element is to be set/repeated 105 times in a different sheet and next to the first occurrence of that element, I'll set a formula that will populate adjacent columns with more data.
The code below works, but it takes too long and I was wondering if there'd be a more effecient solution.
function getGFTickersData() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("LIST OF STOCKS");
var tickerRng = ss.getRange(2, 1, ss.getLastRow(), 1).getValues();
var TDSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TickersData");
var startRow = 2;
var tickerArr = [];
for (var b = 0; b < tickerRng.length; b++) {
var tickerToArr = tickerRng[b][0];
tickerArr.push(tickerToArr);
}
for (var a = 0; a < tickerArr.length; a++) {
var ticker = tickerArr[a];
if (tickerArr.indexOf(ticker) != -1) { //So it writes the tickers once
if (ticker[0] != '') {
var row = TDSheet.getRange(TDSheet.getLastRow() + 1, 1, 105, 1).setValue(ticker);
var targetRow = TDSheet.getRange("B:B").getValues();
var maxIndex = targetRow.reduce(function (maxIndex, row, index) {
return row[0] === "" ? maxIndex : index;
}, 0);
var row = TDSheet.getRange(maxIndex + 2, 2).setFormula("=query(googlefinance(" + '"' + ticker + '"' + ",'all shares'!A4,'all shares'!D3,'all shares'!D4,'all shares'!D5)," + '"' + "select *" + '"' + ",1)");
}
}
}
}
It usually gives me an Exceeded maximum execution time error.
Appreciate your help in pointing me to a better way to build it.