您好,我想将列与日期进行比较(即“推荐日期”列)
今天,这就是我所拥有的
function newF(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Worksheet');
var range = ss.getDataRange();
var headers = range.getValues()[0];
var colIndex = headers.indexOf("Referral Date");
var today = new Date();
var searchRange = ss.getRange(2,colIndex+1,ss.getLastRow()-1);
for (i=0;i<range.getLastRow();i++){
var dates = searchRange.getValues();
if (today.valueOf()>dates.valueOf()){
updatelFilter()
} else{
SpreadsheetApp.getUi().alert('Future Date Error');
break;
}
}
}
我遇到的问题是,无论列(“引用日期”)中的日期如何,它都会引发警报“ 未来日期错误”。让我知道是否需要其他信息。
我的目标:
1)如果日期列(引荐日期)大于当前日期:引发警报错误并且不应运行updateFilter
2)如果(推荐日期)小于当前日期:运行updateFilter
函数
答案 0 :(得分:1)
searchRange.getValues()
产生一个二维数组。因此dates[0][0]
指向日期,而dates[0]
指向数组。var dates = searchRange.getValues();
在循环内部被重复调用,理想情况下应在外部调用一次,因为值不会改变;在循环中调用它既昂贵又多余for (i=0;i<range.getLastRow();i++){
如果遵循第2点,则可以用i<dates.length
替换条件if (today.valueOf()>dates.valueOf()){
我相信应该有dates[0]
function newF(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Worksheet');
var range = ss.getDataRange();
var headers = range.getValues()[0];
var colIndex = headers.indexOf("Referral Date");
var today = new Date();
var searchRange = ss.getRange(2,colIndex+1,ss.getLastRow()-1);
var dates = searchRange.getValues().map(d=>d[0]);
for (i=0;i<dates.length;i++) {
if (today.valueOf()>dates[i].valueOf()){
updateFilter()
} else {
SpreadsheetApp.getUi().alert('Future Date Error');
break;
}
}
}
用以下内容替换循环-
if(dates.some(d => today.valueOf() < d.valueOf())) {
SpreadsheetApp.getUi().alert('Future Date Error');
} else {
for (let i=0; i<dates.length; i++) {
updateFilter();
}
}