Google Script - isDate 函数和优化 - 寻找与 for 循环不同的方法


  • 我有几列,每行(人(有不同类型的数据。例如,第1列(A(包含名称,第2列(B(包含点数,第3列包含用户设置的日期(如果不是,则为空(。

  • 我遇到的第一个问题是验证在工作表中设置日期的输入。现在它只是在里面粘贴任何东西,所以我做了一个变通办法:


var input = (request.parameter.input || "");
ss.getRange("I1").setValue(input); //input given by user using text
var isdate = ss.getRange("J1").getDisplayValue(); //J1 contains a formula "=isDATE(I1)"
if(isdate == "TRUE"){ ss.getRange(position + 2, 3, 1, 1).setValue(input);}
  • 然而,这并不是真正有效的。但我似乎无法让它发挥作用。

  • 第二个问题是,我想遍历所有行,看看该日期是否与今天的日期一致(如果是他们的生日(,并将它们推送到字符串上,然后在最后返回字符串。

    var input = (request.parameter.input || "");
    var output = ContentService.createTextOutput;
    var users = ss.getRange("A2:A").getValues().filter(String);
    var points = ss.getRange("B2:B").getValues().filter(String);
    var birthdays = ss.getRange("C2:C").getValues();
    var list = [];
    function isBirthdayToday(birthday) {
    if(typeof birthday === "string"){ birthday = new Date(birthday);} 
    var today = new Date();
    if((today.getDate() === birthday.getDate()) && (today.getMonth() === birthday.getMonth())) {
    return true;
    } 
    else {
    return false;
    }
    }
    for (var i = 0; i < users.length; i++) {
    var date = ss.getRange(i + 2, 3, 1, 1).getValue();
    if(isBirthdayToday(date)){
    var name = ss.getRange(i + 2, 1, 1, 1).getValue();
    list.push(name);
    } 
    }
    return output(list) //return all names
    
  • 我确实相信必须有一种更有效的方法来做到这一点。

您可以使用以下代码搜索生日男孩/女孩

function getBirthNames(){
let sheet = SpreadsheetApp.getActive().getSheetByName(-- here is your sheet name --),
values = sheet.getDataRange().getValues(),
today = new Date();
return values.reduce((resArr,element)=>{
let elementDate = new Date(element[2]);   // column C with birthdays 
if (elementDate.getDate()==today.getDate() && elementDate.getMonth()==today.getMonth()){
resArr.push(element[0])                 // column A with names
};
return resArr},[])
}

我现在创建了一个数组,其中包含今天过生日的人的名字。

var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var data = ss.getDataRange().offset(0, 2, ss.getLastRow(), ss.getLastColumn() - 2).getValues();
var BirthNames = [];
data.filter(function getBirthNames(row){
let birthDate = new Date(row[4]);  // the position in the data array that includes birthdays.
let today = new Date();
if ((birthDate.getDate() == today.getDate())&&(birthDate.getMonth() == today.getMonth())){
BirthNames.push(" "+row[0]);  // the position in the data array that includes names.        
};
});

相关内容

  • 没有找到相关文章

最新更新