sheet script google getrange delete copyto apps app google-apps-script google-spreadsheet

google apps script - script - Determinar la última fila en una sola columna



getrange list google script (9)

¿Qué hay de usar un truco de JavaScript?

var Avals = ss.getRange("A1:A").getValues(); var Alast = Avals.filter(String).length;

Tomé prestada esta idea de esta respuesta . El método Array.filter() está operando en la matriz de Avals , que contiene todas las celdas de la columna A. Al filtrar en el constructor de una función nativa, recuperamos solo elementos que no son nulos.

Esto funciona solo para una columna; si el rango contiene múltiples columnas, el resultado de filter() incluirá celdas de todas las columnas, y por lo tanto estará fuera de las dimensiones pobladas del rango.

Tengo una hoja con datos en cols A a H

Necesito determinar la última fila en la columna A que contiene datos (todo es contiguo, sin espacios en los datos / filas).

También hay datos en las otras columnas que tienen más filas de datos que la columna A , por lo que necesito aislar solo la columna A (Y / o solo un rango dentro del col A ).

Puedo hacer esto en el nivel de hoja de cálculo usando

=COUNTA(A2:A100)

Sin embargo, en todos mis trabajos de búsqueda de una solución de Google Apps Script, todo lo que parece son requisitos para realizar múltiples funciones que abarcan docenas de líneas de código, incluidas muchas cosas de i++ ... que podría hacer de forma menos compleja mediante la compensación directamente desde A1 .

¿Hay posiblemente una forma específica de columna de modificar este método?

var aLast = ss.getDataRange().getNumRows();

Si un proceso enrevesado es lo que se requiere, entonces que así sea. Pero me resulta difícil imaginar (¡y aún más difícil de encontrar!) Una solución más simple.

¿Alguien quiere iluminarme (o explotar mi burbuja)?


Aquí hay una manera alternativa de resolver esto. Utiliza un ciclo while pero tiene en cuenta las brechas vacías entre las filas.

function getLastRow (column) { var iLastRow = ss.getActiveSheet().getMaxRows(); var aValues = ss.getActiveSheet().getRange(column + ":" + column).getValues(); var row = ""; while(row == ""){ row = aValues[iLastRow-1]; iLastRow--; } return iLastRow; }


Aunque no existe una fórmula directa, puedo pensar que no requiere docenas de líneas de código para encontrar la última fila en la columna A. Pruebe esta sencilla función. Úselo en una celda de la manera normal en que usaría alguna otra función =CountColA()

function CountColA(){ var sheet = SpreadsheetApp.getActiveSheet(); var data = sheet.getDataRange().getValues(); for(var i = data.length-1 ; i >=0 ; i--){ if (data[i][0] != null && data[i][0] != ''''){ return i+1 ; } } }


Esta puede ser otra forma de ir por las alas. Es posible que necesite jugar con el código para satisfacer sus necesidades

function fill() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange(''a1'').activate(); var lsr = spreadsheet.getLastRow(); lsr=lsr+1; lsr="A1:A"+lsr; spreadsheet.getActiveRange().autoFill(spreadsheet.getRange(lsr), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES); };


Estoy usando getDataRange() seguido de getNumRows() . La primera función

Devuelve un Rango correspondiente a las dimensiones en las que están presentes los datos

y la segunda función

Devuelve el número de filas en este rango.

var ss = SpreadsheetApp.getActiveSpreadsheet(); var ws = ss.getActiveSheet(); var lastRow = ws.getDataRange().getNumRows();

PD. Espero que esto funcione para todos los casos.


Para obtener el número de columnas o el índice de la última columna:

var numColumns = sheet.getLastColumn()

Para obtener el no de filas o el índice de la última fila:

var numRows = sheet.getLastRow()

dónde

var sheet = SpreadsheetApp.getActiveSheet()


Puedes hacer esto yendo por el camino inverso. Comenzando desde la última fila en la hoja de cálculo y subiendo hasta obtener algún valor. Esto funcionará en todos los casos, incluso si tiene algunas filas vacías en el medio. El código se ve a continuación:

var iLastRowWithData = lastValue(''A''); function lastValue(column) { var iLastRow = SpreadsheetApp.getActiveSheet().getMaxRows(); var aValues = SpreadsheetApp.getActiveSheet().getRange(column + "2:" + column + lastRow).getValues(); for (; aValues[iLastRow - 1] == "" && iLastRow > 0; iLastRow--) {} return iLastRow; }


Reescribí las funciones getLastRow / getLastColumn para especificar un índice de fila o columna.

function get_used_rows(sheet, column_index){ for (var r = sheet.getLastRow(); r--; r > 0) { if (sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getCell(r, column_index).getValue() != ""){ return r; break; } } } function get_used_cols(sheet, row_index){ for (var c = sheet.getLastColumn(); c--; c > 0) { if (sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getCell(row_index, c).getValue() != ""){ return c; break; } } }


var Direction=SpreadsheetApp.Direction; var aLast =ss.getRange("A"+(ss.getLastRow()+1)).getNextDataCell(Direction.UP).getRow();