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