在 Google 用于在 Google 日历中创建事件的应用程序脚本中需要帮助
Need help in Google App Script for Creating event in Google Calendar
我需要帮助创建 google 应用程序脚本以在 Google 日历中创建事件,按照我正在使用的代码但给出错误“无法读取 属性 'setColor' of null" 用于颜色设置。
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Test jun")
var index = 2;
var lastRow = sheet.getLastRow();
for (; index <= lastRow; index++) {
var title = sheet.getRange(index, 1, 1, 1).getValue();
var startTime = sheet.getRange(index, 2, 1, 1).getValue();
var endTime = sheet.getRange(index, 3, 1, 1).getValue();
var description = sheet.getRange(index, 4, 1, 1).getValue();
var location = sheet.getRange(index, 5, 1, 1).getValue();
var guests = sheet.getRange(index, 6, 1, 1).getValue();
var eventColour = sheet.getRange(index, 7, 1, 1).getValue();
var sendInvites = true;
var calendar = CalendarApp.getCalendarById("rhse6nvlklu7n2pm86jaiuqsis@group.calendar.google.com").createEvent(title, startTime, endTime,
{ description: description, location: location, guests: guests, sendInvites: sendInvites }).getId();
if (eventColour === 'Condition1') CalendarApp.getEventById(calendar).setColor("10")
if (eventColour === "Condition2") CalendarApp.getEventById(calendar).setColor("11");
if (eventColour === "Condition3") CalendarApp.getEventById(calendar).setColor("12");
if (eventColour === "Condition4") CalendarApp.getEventById(calendar).setColor("13");
}// End of For Loop
}// End of Function
请帮忙。
修改点:
当我看到你var calendar = CalendarApp.getCalendarById("rhse6nvlklu7n2pm86jaiuqsis@group.calendar.google.com").createEvent(title, startTime, endTime, {description: description, location: location, guests: guests, sendInvites: sendInvites }).getId();
的脚本时,事件被创建到除默认日历之外的日历。
ClassClassCalendarAppgetEventById(iCalId)
的官方文档是这样说的。
Gets the event with the given ID. If the series belongs to a calendar other than the default calendar, this method must be called from that CalendarApp
. Calling getEventById(iCalId)
only returns an event in the default calendar.
- 我认为这就是您遇到问题的原因。
在这种情况下,需要从特定日历中检索事件。
- 在你的脚本中,我认为创建事件的事件对象可以直接用于
setColor()
。
此外,在您的脚本中,使用了 10, 11, 12, 13
的事件颜色 ID。但是在当前阶段,事件颜色是从1到11,请注意这个。
在你的脚本中,你的每个if语句都是独立的。所以你可以使用 else
.
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
从:
var calendar = CalendarApp.getCalendarById("rhse6nvlklu7n2pm86jaiuqsis@group.calendar.google.com").createEvent(title, startTime, endTime,
{description: description, location: location, guests: guests, sendInvites: sendInvites }).getId();
if (eventColour === 'Condition1') CalendarApp.getEventById(calendar).setColor("10")
if (eventColour === "Condition2") CalendarApp.getEventById(calendar).setColor("11");
if (eventColour === "Condition3") CalendarApp.getEventById(calendar).setColor("12");
if (eventColour === "Condition4") CalendarApp.getEventById(calendar).setColor("13");
到:
var event = CalendarApp.getCalendarById("rhse6nvlklu7n2pm86jaiuqsis@group.calendar.google.com").createEvent(title, startTime, endTime, { description: description, location: location, guests: guests, sendInvites: sendInvites });
if (eventColour === 'Condition1') {
event.setColor("1");
} else if (eventColour === "Condition2") {
event.setColor("2");
} else if (eventColour === "Condition3") {
event.setColor("3");
} else if (eventColour === "Condition4") {
event.setColor("4");
}
或者,您也可以使用如下对象修改脚本。
var obj = {"Condition1": "1", "Condition2": "2", "Condition3": "3", "Condition4": "4"};
CalendarApp
.getCalendarById("rhse6nvlklu7n2pm86jaiuqsis@group.calendar.google.com")
.createEvent(title, startTime, endTime, { description: description, location: location, guests: guests, sendInvites: sendInvites })
.setColor(obj[eventColour] || "11"); // In this case, when "eventColour" is not included in "obj", "11" of event color is used.
- 如果要使用事件ID,可以使用
CalendarApp.getCalendarById("rhse6nvlklu7n2pm86jaiuqsis@group.calendar.google.com").getEventById({eventId}).setColor("1");
。
- 关于活动颜色,你也可以像
CalendarApp.EventColor.BLUE
一样使用。 Ref
参考文献:
我需要帮助创建 google 应用程序脚本以在 Google 日历中创建事件,按照我正在使用的代码但给出错误“无法读取 属性 'setColor' of null" 用于颜色设置。
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Test jun")
var index = 2;
var lastRow = sheet.getLastRow();
for (; index <= lastRow; index++) {
var title = sheet.getRange(index, 1, 1, 1).getValue();
var startTime = sheet.getRange(index, 2, 1, 1).getValue();
var endTime = sheet.getRange(index, 3, 1, 1).getValue();
var description = sheet.getRange(index, 4, 1, 1).getValue();
var location = sheet.getRange(index, 5, 1, 1).getValue();
var guests = sheet.getRange(index, 6, 1, 1).getValue();
var eventColour = sheet.getRange(index, 7, 1, 1).getValue();
var sendInvites = true;
var calendar = CalendarApp.getCalendarById("rhse6nvlklu7n2pm86jaiuqsis@group.calendar.google.com").createEvent(title, startTime, endTime,
{ description: description, location: location, guests: guests, sendInvites: sendInvites }).getId();
if (eventColour === 'Condition1') CalendarApp.getEventById(calendar).setColor("10")
if (eventColour === "Condition2") CalendarApp.getEventById(calendar).setColor("11");
if (eventColour === "Condition3") CalendarApp.getEventById(calendar).setColor("12");
if (eventColour === "Condition4") CalendarApp.getEventById(calendar).setColor("13");
}// End of For Loop
}// End of Function
请帮忙。
修改点:
当我看到你
var calendar = CalendarApp.getCalendarById("rhse6nvlklu7n2pm86jaiuqsis@group.calendar.google.com").createEvent(title, startTime, endTime, {description: description, location: location, guests: guests, sendInvites: sendInvites }).getId();
的脚本时,事件被创建到除默认日历之外的日历。ClassClassCalendarApp
getEventById(iCalId)
的官方文档是这样说的。Gets the event with the given ID. If the series belongs to a calendar other than the default calendar, this method must be called from that
CalendarApp
. CallinggetEventById(iCalId)
only returns an event in the default calendar.- 我认为这就是您遇到问题的原因。
在这种情况下,需要从特定日历中检索事件。
- 在你的脚本中,我认为创建事件的事件对象可以直接用于
setColor()
。
- 在你的脚本中,我认为创建事件的事件对象可以直接用于
此外,在您的脚本中,使用了
10, 11, 12, 13
的事件颜色 ID。但是在当前阶段,事件颜色是从1到11,请注意这个。在你的脚本中,你的每个if语句都是独立的。所以你可以使用
else
.
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
从:var calendar = CalendarApp.getCalendarById("rhse6nvlklu7n2pm86jaiuqsis@group.calendar.google.com").createEvent(title, startTime, endTime,
{description: description, location: location, guests: guests, sendInvites: sendInvites }).getId();
if (eventColour === 'Condition1') CalendarApp.getEventById(calendar).setColor("10")
if (eventColour === "Condition2") CalendarApp.getEventById(calendar).setColor("11");
if (eventColour === "Condition3") CalendarApp.getEventById(calendar).setColor("12");
if (eventColour === "Condition4") CalendarApp.getEventById(calendar).setColor("13");
到:
var event = CalendarApp.getCalendarById("rhse6nvlklu7n2pm86jaiuqsis@group.calendar.google.com").createEvent(title, startTime, endTime, { description: description, location: location, guests: guests, sendInvites: sendInvites });
if (eventColour === 'Condition1') {
event.setColor("1");
} else if (eventColour === "Condition2") {
event.setColor("2");
} else if (eventColour === "Condition3") {
event.setColor("3");
} else if (eventColour === "Condition4") {
event.setColor("4");
}
或者,您也可以使用如下对象修改脚本。
var obj = {"Condition1": "1", "Condition2": "2", "Condition3": "3", "Condition4": "4"};
CalendarApp
.getCalendarById("rhse6nvlklu7n2pm86jaiuqsis@group.calendar.google.com")
.createEvent(title, startTime, endTime, { description: description, location: location, guests: guests, sendInvites: sendInvites })
.setColor(obj[eventColour] || "11"); // In this case, when "eventColour" is not included in "obj", "11" of event color is used.
- 如果要使用事件ID,可以使用
CalendarApp.getCalendarById("rhse6nvlklu7n2pm86jaiuqsis@group.calendar.google.com").getEventById({eventId}).setColor("1");
。 - 关于活动颜色,你也可以像
CalendarApp.EventColor.BLUE
一样使用。 Ref