//***GLOBALS***// var ss = SpreadsheetApp.getActive(); var portfolioSheet = ss.getSheetByName("master"); //replace master with name of the tab that has your portfolio data var columnToCheck = portfolioSheet.getRange("A:A").getValues(); // Get the last row based on the data range of a single column. var tickerCount = getLastRowSpecial(columnToCheck); /************************************************************************ * * Gets the last row number based on a selected column range values * * @param {array} range : takes a 2d array of a single column's values * * @returns {number} : the last row number with a value. * */ function getLastRowSpecial(range){ var rowNum = 0; var blank = false; for(var row = 0; row < range.length; row++){ if(range[row][0] === "" && !blank){ rowNum = row; blank = true; }else if(range[row][0] !== ""){ blank = false; }; }; return rowNum; } function updatePortfolio () { "use strict"; var sparkCol, sparkRange,sparkHeader,peCol, peRange, peHeader, fwdPECol, fwdPERange, fwdPEHeader, payoutRatioCol, payoutRatioRange, payoutRatioHeader, betaCol, betaRange, betaHeader, mktCapCol, mktCapRange, mktCapHeader; //set variables for columns of portfolio data sparkCol = 7; peCol = 8; fwdPECol = 9; payoutRatioCol = 26; betaCol = 34; mktCapCol = 36; //set variables for portfolio data ranges sparkRange = portfolioSheet.getRange(2, sparkCol, tickerCount - 1, 1); peRange = portfolioSheet.getRange(2, peCol, tickerCount - 1, 1); fwdPERange = portfolioSheet.getRange(2, fwdPECol, tickerCount - 1, 1); payoutRatioRange = portfolioSheet.getRange(2, payoutRatioCol, tickerCount - 1, 1); betaRange = portfolioSheet.getRange(2, betaCol, tickerCount - 1, 1); mktCapRange = portfolioSheet.getRange(2, mktCapCol, tickerCount - 1, 1); //set variables for headers to update with timestamp sparkHeader = portfolioSheet.getRange("G1"); peHeader = portfolioSheet.getRange("H1"); fwdPEHeader = portfolioSheet.getRange("I1"); payoutRatioHeader = portfolioSheet.getRange("Z1"); betaHeader = portfolioSheet.getRange("AH1"); mktCapHeader = portfolioSheet.getRange("AJ1"); //insert formulas into the ranges to get current portfolio data sparkRange.setFormulaR1C1('=IFERROR(SPARKLINE(GOOGLEFINANCE(R[0]C[-5],\"price\",TODAY()-365,TODAY(),\"weekly\"), {\"charttype\",\"line\";\"linewidth\",3;\"color\",IF(GOOGLEFINANCE(R[0]C[-5],\"price\")