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




zusammenfügen prüfen (4)

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.


Answers

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)

Oder alternativ setValues() , das alle Werte gleichzeitig schreibt. Scheint auch schneller auszuführen.

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)

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

Eine andere Möglichkeit dazu ist:

Sie können die Übereinstimmungsfunktion verwenden, d. H.

x = "teststring";

if (x.match("test")) {
     // Code
}

match () kann auch mit regulären Ausdrücken arbeiten:

x = "teststring";

if (x.match(/test/i)) {
     // Code
}






javascript google-apps-script google-spreadsheet