昨天我问了这个问题:Send email notification when values in different columns increase 基本上,我有一个百分比计算数组,如果最后一行不同列中的值发生变化并符合增加标准,则应将它们复制到另一个工作表上。
我尝试相应地更改代码:
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次。我究竟做错了什么?谢谢
答案 0 :(得分:1)
问题出在你的价值集上。在您的代码中,您使用列表中的最后一个值设置所有范围的值,因为它是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);
}