javascript anführungszeichen - Iterate über den Bereich, fügen Sie jedem String eine Zeichenfolge hinzu




2 Answers

Sie können so etwas ausprobieren:

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);
    }
  }
}
zusammenfügen prüfen

Ich habe eine Reihe von Zellen in einer Google-Tabelle (activerange) ausgewählt.

Ich möchte über jede Zelle in diesem Bereich iterieren und am Ende eine Zeichenfolge hinzufügen. Die Zeichenfolge ist immer gleich und kann in die Funktion fest codiert werden.

Es scheint eine wirklich einfache Sache zu sein, aber ich habe jetzt eine Stunde lang mit dem Code herumgespielt und kann nichts Nützliches dazu bekommen, und die Dokumente helfen wirklich nicht.

Hier ist was ich jetzt habe. Ich kodiere JS nicht (ich weiß VBA, für alles das hilft ..).

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);
  }
}

Jede Hilfe würde sehr geschätzt werden.




Hier ist eine sehr allgemeine Funktion, die über die Werte eines Bereichs iteriert. Es kann auch verwendet werden, um eine reduce darauf auszuführen (was in Ihrem Fall nützlich ist). Es kann auch aus der Schleife ausbrechen, wenn Sie nur das erste eines Elements finden möchten.

Es kann sehr einfach geändert werden, um eine tatsächliche Bereichsinstanz anstelle des Wertearrays zu akzeptieren.

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();

In Ihrem Fall:

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)



Related

javascript google-apps-script google-spreadsheet