关于谷歌应用脚??本:值增加时将单元格复制到另一张表

Copy cells to another sheet when values increase

昨天我问了这个问题:当不同列中的值增加时发送电子邮件通知
基本上,我有一个百分比计算数组,如果最后一行不同列中的值发生变化并满足增加条件,则应将它们复制到另一张表上。

我尝试相应地更改代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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]);
  }

}

现在的问题是,当我只有一个改变了一切的单元格时,一切都很好,但是当有多个单元格时,脚本只复制一个值,并且重复应该是多少个值。例如,如果值 2 增加了 4 个单元格,则只复制一个值并重复 4 次。我究竟做错了什么?谢谢


问题出在你的价值观上。在您的代码中,您将所有范围的值设置为列表中的最后一个值,因为它是 for 循环中的最后一个值。考虑使用简单易用的 range.setValues()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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);

}