sirve recorrer que para objeto mdn loop instruccion for condicion array javascript google-apps-script google-spreadsheet

javascript - recorrer - Iterar sobre rango, anexar cadena a cada uno



para que sirve la instruccion for (3)

Aquí hay una función de propósito muy general que itera sobre los valores de un rango. También se puede usar para hacer una función de reduce en él (lo cual es útil en su caso). También puede salir del lazo si alguna vez solo quiere encontrar el primero de un elemento.

Se puede cambiar fácilmente para aceptar una instancia de Rango real en lugar de la matriz de valores.

function range_reduce(rangeValues,fn,collection) { collection = collection || []; var debug_rr = "<<"; for(var rowIndex = 0, row=undefined; rowIndex<rangeValues.length && (row = rangeValues[rowIndex]); rowIndex++) { for(var colIndex = 0, value=undefined; colIndex<row.length && (value = row[colIndex]); colIndex++) { try { collection = fn(collection, value, rowIndex, colIndex); } catch (e) { if(! e instanceof BreakException) { throw e; } else { return collection; } } } } return collection; } // this is a created, arbitrary function to serve as a way // to break out of the reduce function. Your callback would // `throw new BreakException()` and `rang_reduce` would stop // there and not continue iterating over "rangeValues". function BreakException();

En tu caso:

var range = SpreadsheetApp.getActiveSheet().getActiveRange() var writeValues = range_reduce(range.getValues(), function(collection, value, row, col) { collection[row] || collection.push([]); collection[row].push(value + " string"); }); range.setValues(writeValues)

Tengo un rango de celdas seleccionadas en una hoja de cálculo de Google (activerange).

Quiero iterar sobre cada celda en ese rango y agregar una cadena hasta el final. La cadena siempre es la misma y puede codificarse en la función.

Parece una cosa realmente simple, pero he estado jugando con el código durante una hora y no puedo conseguir que algo útil suceda, y los documentos en realidad no están ayudando.

Esto es lo que tengo ahora. No codifico JS (sí sé VBA, por todo lo que ayuda ...).

function appendString() { var range = SpreadsheetApp.getActiveSheet().getActiveRange(); for (var i = 0; i < range.length; i++) { var currentValue = range[i].getValue(); var withString = currentValue + " string"; range[i].setValue(withString); } }

Cualquier ayuda sería muy apreciada.


O alternativamente use setValues() que escribe todos los valores al mismo tiempo. Parece que se ejecuta más rápido también.

var range = SpreadsheetApp.getActiveSheet().getActiveRange(); var numRows = range.getNumRows(); var numCols = range.getNumColumns(); var writeValues = [] for (var i = 1; i <= numRows; i++) { var row = [] for (var j = 1; j <= numCols; j++) { var currentValue = range.getCell(i,j).getValue(); var withString = currentValue + " string"; row.push(withString) } writeValues.push(row) } range.setValues(writeValues)


Puedes probar algo como esto:

function appendString() { var range = SpreadsheetApp.getActiveSheet().getActiveRange(); var numRows = range.getNumRows(); var numCols = range.getNumColumns(); for (var i = 1; i <= numRows; i++) { for (var j = 1; j <= numCols; j++) { var currentValue = range.getCell(i,j).getValue(); var withString = currentValue + " string"; range.getCell(i,j).setValue(withString); } } }