昨天我问了这个问题:当不同列中的值增加时发送电子邮件通知基本上,我有一系列百分比计算,如果最后一行的不同列中的值更改并符合增加的标准,则应在另一个表上复制它们。
我试图相应地更改代码:
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);
}