Javascript 如何在GoogleApps脚本中获取范围并设置值

Javascript 如何在GoogleApps脚本中获取范围并设置值,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在尝试在edit上运行一个函数,该函数将在一系列单元格中查找值“c”,然后将其替换为单词“Closed” 这就是我到目前为止所做的: function onEdit(e) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var data = sheet.getRange('CA12:CA15').getValues(); var closed = 'c' for(var i=0; i&

我正在尝试在edit上运行一个函数,该函数将在一系列单元格中查找值“c”,然后将其替换为单词“Closed”

这就是我到目前为止所做的:

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getRange('CA12:CA15').getValues();
  var closed = 'c'
  for(var i=0; i<data.length;i++) {
  if(data[i] == closed) {

    Logger.log('yes')
    Logger.log(data[i]);    
  }
    }
  }
因此,当我的值在给定范围内时,这成功地记录了“是”和值“c”。但是我现在如何替换这个值呢

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

要点: getValues返回按行然后按列排序的二维数组。您正在使用数据[i]访问一维数组 i数组+起始行的索引等于循环中的当前行。 代码段速度慢: 但是上面的过程很慢,因为我们正在为每个真实条件调用setValue。更好的方法是使用数组。 代码段FAST 70x: 最快的方法是从工作表UI或API使用查找和替换 基本阅读: 试试这个:

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.alertLogger.getLog;显示记录器结果。

非常感谢-第一个选项实际上对我很有效,尽管我知道它效率不高。然而,我还有一个问题。我需要查看的数据范围实际上是整个工作表,而不仅仅是CA12:CA15。但是,当我尝试扩大范围时,它不起作用。。。
  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');
    }
  }
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');
  }

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