getLastRow() no funciona en mi script. Estoy tratando de devolver la última fila que tiene datos. Pero dado que la hoja de cálculo tiene filas vacías debajo de las filas llenas de datos, el script regresa con todas las filas pero quiero que se detenga en la última fila que tiene los datos. Alguien me puede decir como arreglar esto? Los datos contienen la fórmula de matriz y aquí está el script: -
function Productivity() { var ui = SpreadsheetApp.getUi(); var response = ui.alert('Do you want to send emails to all PRICE ACCURACY resources now?', ui.ButtonSet.YES_NO); // Process the user's response. if (response == ui.Button.YES) { var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Productivity Report Out') var range = ss.getDataRange().getValues() var lastrow = ss.getLastRow(); //Logger.log(range.length) for(var i=1;i<=lastrow; i++) //i<range.length { Logger.log("Index:"+i+" | ["+range[i]+"]") var status = range[i][14] if(status !='No') { var name = range[i][0] var ldap = range[i][1] var target = range[i][2] var new_mvt = range[i][3] var onboarding = range[i][4] var ubio_rates = range[i][5] var violation = range[i][6] var reevaluation = range[i][7] var total = range[i][8] var current_productivity = range[i][9] var deficit = range[i][10] var remaining_checks = range[i][11] var week = range[i][12] var date = range[i][13]Usted define lastRow pero no lo usa.
Supongo que esto es lo que estás buscando:
for(var i=1; i<=lastRow; i++) Como se diseñó, .getLastRow() devuelve la última fila que tiene datos. O de la documentación: Returns the position of the last row that has content.
Nota al margen: está comenzando su ciclo en el índice 1 (fila 2), si no tiene una fila de encabezado, debe usar 0 (fila 1).
if(status !='No') sería verdadero para una línea en blanco. Tal vez esté usando algo como una fórmula de matriz que está causando que el cálculo de getLastRow() sea incorrecto. Haga un Logger.log(lastRow) y vea si tiene sentido.
Prueba esta función:
function getColumnHeight(col, sh, ss) { var ss = ss || SpreadsheetApp.getActive(); var sh = sh || ss.getActiveSheet(); var col = col || sh.getActiveCell().getColumn(); var rcA = []; if (sh.getLastRow()){ rcA = sh.getRange(1, col, sh.getLastRow(), 1).getValues().flat().reverse(); } let s = 0; for (let i = 0; i < rcA.length; i++) { if (rcA[i].toString().length == 0) { s++; } else { break; } } return rcA.length - s; //const h = Utilities.formatString('col: %s len: %s', col, rcA.length - s); //Logger.log(h); //SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(h).setWidth(150).setHeight(100), 'Col Length') }