为什么 getEventById() return 为空?
Why does getEventById() return null?
所以我对使用 GAS 进行编码还很陌生,前几天我一直在研究这个问题。我的想法是制作一个事件电子表格并在我的日历中创建它们并检查事件是否已经存在并在事件的名称或日期有任何更改时更新它。
这是我的代码供参考:
function events() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
const cal = CalendarApp.getCalendarById("calID");
for (i = 3; i <= sheet.getLastRow(); i++) {
var date = sheet.getRange(i, 8).getValue();
if (date > 0) {
var title = sheet.getRange(i, 3).getValue();
var id = sheet.getRange(i, 9).getValue();
if (id != 0) {
var ide = cal.getEventById("id");
var idf = ide.getAllDayStartDate();
var idn = ide.getTitle();
if (date != idf) {
ide.setAllDayDate(fecha);
}
if (title != idn) {
ide.setTitle(nombre);
}
}
else {
var nid = cal.createAllDayEvent(name, date).getId();
sheet.getRange(i, 9).setValue(nid);
}
}
}
}
我能够成功创建事件,但是当它检查一个已经存在的事件的日期时,它说:
Error TypeError: Cannot read property 'getAllDayStartDate' of null
后来,使用 Logger.log() 我发现即使具有该 ID 的事件存在并且它可以访问日历,它也会返回 null:
var ide = cal.getEventById("id");
然后我上网查找 但是当我尝试 运行 代码标记为解决方案时 returns 为空:
var event = CalendarApp.getDefaultCalendar().getEvents(now, nextEvent);
然后我尝试删除并再次允许日历和工作表的权限,但它没有用。
我什至尝试像这样手动编辑 appsscript.json 文件:
{
...
"oauthScopes": [
"https://www.googleapis.com/auth/calendar",
"https://www.googleapis.com/auth/calendar.readonly",
"https://www.google.com/calendar/feeds",
"https://www.googleapis.com/auth/spreadsheets.currentonly",
"https://www.googleapis.com/auth/spreadsheets"
]
...
}
但这也没有用。
如有任何帮助,我们将不胜感激!
编辑:
我现在已经使用默认日历进行了测试并创建了一个新日历,但它不起作用。我开始认为这是一个错误,但我不确定是什么导致了它。
我在写 getEventById("id")
应该是 getEventById(id)
:
...
var id = sheet.getRange(i, 9).getValue();
if (id != 0) {
var ide = cal.getEventById(id);
...
所以我对使用 GAS 进行编码还很陌生,前几天我一直在研究这个问题。我的想法是制作一个事件电子表格并在我的日历中创建它们并检查事件是否已经存在并在事件的名称或日期有任何更改时更新它。
这是我的代码供参考:
function events() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
const cal = CalendarApp.getCalendarById("calID");
for (i = 3; i <= sheet.getLastRow(); i++) {
var date = sheet.getRange(i, 8).getValue();
if (date > 0) {
var title = sheet.getRange(i, 3).getValue();
var id = sheet.getRange(i, 9).getValue();
if (id != 0) {
var ide = cal.getEventById("id");
var idf = ide.getAllDayStartDate();
var idn = ide.getTitle();
if (date != idf) {
ide.setAllDayDate(fecha);
}
if (title != idn) {
ide.setTitle(nombre);
}
}
else {
var nid = cal.createAllDayEvent(name, date).getId();
sheet.getRange(i, 9).setValue(nid);
}
}
}
}
我能够成功创建事件,但是当它检查一个已经存在的事件的日期时,它说:
Error TypeError: Cannot read property 'getAllDayStartDate' of null
后来,使用 Logger.log() 我发现即使具有该 ID 的事件存在并且它可以访问日历,它也会返回 null:
var ide = cal.getEventById("id");
然后我上网查找
var event = CalendarApp.getDefaultCalendar().getEvents(now, nextEvent);
然后我尝试删除并再次允许日历和工作表的权限,但它没有用。 我什至尝试像这样手动编辑 appsscript.json 文件:
{
...
"oauthScopes": [
"https://www.googleapis.com/auth/calendar",
"https://www.googleapis.com/auth/calendar.readonly",
"https://www.google.com/calendar/feeds",
"https://www.googleapis.com/auth/spreadsheets.currentonly",
"https://www.googleapis.com/auth/spreadsheets"
]
...
}
但这也没有用。
如有任何帮助,我们将不胜感激!
编辑:
我现在已经使用默认日历进行了测试并创建了一个新日历,但它不起作用。我开始认为这是一个错误,但我不确定是什么导致了它。
我在写 getEventById("id")
应该是 getEventById(id)
:
...
var id = sheet.getRange(i, 9).getValue();
if (id != 0) {
var ide = cal.getEventById(id);
...