当值增加时,将细胞复制到另一张纸



昨天我问了这个问题:当不同列中的值增加时发送电子邮件通知基本上,我有一系列百分比计算,如果最后一行的不同列中的值更改并符合增加的标准,则应在另一个表上复制它们。

我试图相应地更改代码:

function compareValue() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Perc");
  var data = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();
  var list = []; 
  for(var i=0; i<data[0].length; i++){
    var title = data[0][i]; 
    var value = parseFloat(data[data.length -1][i]); /
    if(value >= 2){     
      var element = [title, value];    
      list.push(element)                
    }    
  }
  if(list.length >= 1){ 
    setValues(list);
  }
}

function setValues(list) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Alert");
  sheet.getRange('A1:Z50').clearContent();
  var title = sheet.getRange(1, 1, list.length);
  var value = sheet.getRange(1, 2, list.length);
  for(var i=0; i<list.length;i++){
    title.setValue(list[i][0]);
    value.setValue(list[i][1]);
  }
}

现在问题是,当我只有一个更改所有内容的单元格时,但是当有多个单元格时,脚本只复制一个值,并且对应该是的值的数量重复。例如,如果4个单元格与值2相比,则仅复制一个值,然后重复4次。我究竟做错了什么?谢谢

问题集合在您的值集上。在您的代码上,您将全范围的值设置为列表上的最后一个值,因为它是for循环的最后一个值。考虑使用易于使用的range.setValues((。

function compareValue() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Perc");
  var data = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();
  var list = []; 
  for(var i=0; i<data[0].length; i++){
    var title = data[0][i]; 
    var value = parseFloat(data[data.length -1][i]);
    if(value >= 2){     
      var element = [title, value];    
      list.push(element)                
    }    
  }
  if(list.length >= 1){ 
    setValues(list);
  }
}

function setValues(list) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Alert");
  sheet.getRange('A1:Z50').clearContent();
  var range = sheet.getRange(1, 1, list.length, list[0].length);
  range.setValues(list);
}

相关内容

最新更新