-
我有几列,每行(人(有不同类型的数据。例如,第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.
};
});