Iterate over range, append string to each

google-apps-script, google-sheets

Solution

You can try something like this:

//
// helper `forEachRangeCell` function
//

function forEachRangeCell(range, f) {
  const numRows = range.getNumRows();
  const numCols = range.getNumColumns();
  
  for (let i = 1; i <= numCols; i++) {
    for (let j = 1; j <= numRows; j++) {
      const cell = range.getCell(i, j)
      
      f(cell)
    }
  }
}

//
// Usage
//

const range = SpreadsheetApp.getActiveSheet().getActiveRange();

forEachRangeCell(range, (cell) => {
  cell.setValue(`${cell.getValue()} string`)
})

Problem

I have a range of cells selected in a Google Sheets (activerange). I want to iterate over every cell in that range, and add a string to the end. The string is always the same, and can be hard coded into the function. It seems like a really simple thing, but I've been messing with the code for an hour now and can't get anything useful to happen, and the docs are really not helping. Here's what I have now. I don't code JS (I do know VBA, for all that helps..). ``` 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); } } ```

Original source