javascript replace - 迭代範圍,將字符串附加到每個範圍




all regex (4)

或者使用setValues() ,它同時寫入所有值。 似乎執行得更快。

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)

我在Google電子表格(activerange)中選擇了一系列單元格。

我想迭代該範圍內的每個單元格,並在末尾添加一個字符串。 字符串始終相同,可以硬編碼到函數中。

這似乎是一件非常簡單的事情,但我現在已經把代碼弄亂了一個小時,並且無法發生任何有用的事情,而且文檔實際上並沒有幫助。

這就是我現在擁有的。 我不編碼JS(我知道VBA,對於所有有幫助的人......)。

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

非常感激任何的幫助。


這是一個非常通用的函數,它迭代一個範圍的值。 它也可以用來對它做一個reduce函數(這對你的情況很有用)。 如果您只想找到第一個元素,它也可以突破循環。

它可以很容易地更改為接受實際的Range實例而不是值數組。

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

在你的情況下:

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)

你可以嘗試這樣的事情:

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

jquery現在允許你這樣做:

$.each( obj, function( key, value ) {
  alert( key + ": " + value );
});




javascript google-apps-script google-spreadsheet