如何在Google Apps脚本中获取范围然后设置值

时间:2018-11-29 12:20:56

标签: javascript google-apps-script google-sheets

我试图在编辑时运行一个函数,该函数将在一系列单元格中查找值“ c”,然后将其替换为“ Closed”一词。

这是我到目前为止所拥有的:

Unmatched signature item Item:  val id_read : read id
Unmatched signature item Item:  val password_read : read password
Unmatched signature item Item:  val id_show : show id

因此,当我的值在给定范围内时,这将成功记录“是”和值“ c”。但是,现在如何替换该值?

我尝试使用getRange()存储数据范围[i],但它不允许我这样做。如果我可以得到这个范围,那么我知道可以使用range.setValue('Closed'),但此刻有点卡住了。我知道我在做一些非常简单,非常错误的事情,但是任何帮助都会很棒。

3 个答案:

答案 0 :(得分:0)

要点:

  • getValues返回一个二维数组,该数组按行然后按列排序。您正在使用data[i]
  • 访问一维数组
  • i数组+起始行的索引等于循环中的当前行。

代码段(慢):

if(data[i][0] == closed) { //2D
 sheet.getRange('CA'+(12+i)).setValue('Closed');
}
  • 但是上面的过程很慢,因为我们为每个真实条件调用setValue()。更好的方法是使用数组。

代码段(快速70x):

var rng =sheet.getRange('CA12:CA15');
var data = rng.getValues();
var output = data.map(function(e) { return e[0] == closed ? ['Closed'] : e });
rng.setValues(output); //Single call
  • 最快的方法是通过表格UI或API使用查找和替换

基本阅读:

答案 1 :(得分:0)

尝试一下:

function onEdit(e) {
  var sheet = e.range.getSheet();
  var editedCell=sheet.getRange(e.range.getRow(),e.range.getColumn()).getA1Notation();
  var data = sheet.getDataRange().getValues();
  var found=false;
  var foundA=[];
  for(var i=0;i<data.length;i++) {

    if(data[i][2] == 'c') {
      found=true;
      foundA.push(i+1);
    }
  }
  if(found){
    Logger.log('Matches found in following rows of column C: %s\nCell Edited was: %s',foundA.join(','),editedCell);
  }else{
    Logger.log('No matches found');
  }

}

出于测试目的,您可以使用SpreadsheetApp.getUi().alert(Logger.getLog());显示记录器结果。

答案 2 :(得分:0)

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getRange('C2:C').getValues();
  var name = valuetosearchincColumnC;
  for(var i=0; i<data.length;i++) {
    if(data[i] == name) {
      
      var id = i + 2;// plus two bec i have a header
      sheet.getRange(id,2).setValue('ValuetoChange');
    }
  }