我试图在Google应用程序上显示一条生日提醒信息,其中数据存储在google中。

我在部署的web应用程序上得到的信息是-->今天是未定义的的生日。
下面是我的脚本代码
function main() {
var sheet = SpreadsheetApp.getActive().getSheetByName("Birthdays");
var numRows = sheet.getLastRow();
var range = sheet.getRange(2, 1, numRows - 1, 2).getValues();
for(var index in range) {
var row = range[index];
var name = row[0];
var birthday = row[1];
if(isBirthdayToday(birthday)) {
displayReminder(name);
}
}
}
// Check if a person’s birthday is today
function isBirthdayToday(birthday) {
var today = new Date();
if((today.getDate() === birthday.getDate()) &&
(today.getMonth() === birthday.getMonth())) {
return true;
} else {
return false;
console.log(today);
}
}
// Function to display the reminder
function displayReminder(name) {
var message = "It is " + name + " 's birthday today.";
return message;
console.log(displayReminder);
}Html
<div>
<script>
function onSuccess(quote) {
var div = document.getElementById('Bday');
div.innerHTML = quote;
}
google.script.run.withSuccessHandler(onSuccess)
.displayReminder();
</script>
<em> <p id="Bday"></p></em>
</div>注意:当我为函数isBirthdayToday(生日)运行控制台日志时,我会得到以下错误。
TypeError:无法读取未定义的属性“getDate”(第25行,文件“getDate”)
我不知道我哪里出了问题。发生了什么错误?
发布于 2020-11-17 15:08:07
答案:
当您使用for (var index in range)索引时,它不是数组的文字索引,而是实际的元素本身。
代码修正:
您可以通过不引用range的range元素来解决这个问题--因为index已经是元素:
var range = sheet.getRange(2, 1, numRows - 1, 2).getValues();
for (var row in range) {
var name = row[0];
var birthday = row[1];
// ...
}您还从HTML调用了错误的函数:
google.script.run.withSuccessHandler(onSuccess).displayReminder();应:
google.script.run.withSuccessHandler(onSuccess).main();在main()内部,您还需要返回消息:
function main() {
// ... code here
if(isBirthdayToday(birthday)) {
return displayReminder(name);
}
}参考文献:
https://stackoverflow.com/questions/64877458
复制相似问题