事件被添加到两个默认日历 - 我的以及 sheet 的其他用户
Events are getting added to two default calendar - mine as well other users of the sheet
这是允许用户在单元格中放置事件详细信息的代码,他们勾选方框并添加事件。解决方案由 Mike Steelson 提出。
Link -
function onOpen() {
SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
.addItem(' Set up ...', 'myTriggerSetup')
.addToUi();
}
function myTriggerSetup() {
var ssID = SpreadsheetApp.getActiveSpreadsheet().getId()
if (!isTrigger('onSpeEdit')) {
ScriptApp.newTrigger('onSpeEdit').forSpreadsheet(ssID).onEdit().create();
}
}
function isTrigger(funcName) {
var r = false;
if (funcName) {
var allTriggers = ScriptApp.getProjectTriggers();
var allHandlers = [];
for (var i = 0; i < allTriggers.length; i++) {
allHandlers.push(allTriggers[i].getHandlerFunction());
}
if (allHandlers.indexOf(funcName) > -1) {
r = true;
}
}
return r;
}
function onSpeEdit(e) {
var rg = e.range;
if (rg.getRow() == 4 && rg.isChecked() && rg.getSheet().getName() === "Course") {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(rg.offset(-2,0).getValue()).getTime();
var end = new Date(rg.offset(-1,0).getValue()).getTime();
var name = rg.offset(-3,0).getValue();
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
rg.uncheck();
}
}
问题:
事件正在添加到我的默认日历以及用户的日历中。
要求: 它应该被添加到输入详细信息并单击复选框的用户的默认日历中
编辑 1:.
Mike 的解决方案 [1]。
var calendName = CalendarApp.getCalendarsByName('somebody')
我在 sheet 上创建了一个列表,其中包含所有用户的默认日历名称(如 Alex Ab、John Cd、Ewel BM...),并以这种方式更改了两行代码,但事件是未添加。
var calend = CalendarApp.getCalendarsByName('AA51')[0];
calend.createEvent(name, new Date(start), new Date(end));
解决方案[2] = 复制 sheet 并尝试。没用
解决方案 [3] = 将宏添加到按钮有效。此外,不需要触发器。我对触发器感到非常紧张,因为它们突然停止工作。添加一个按钮会是个好主意吗?
我已将 Mike Steelson 的代码添加到按钮中,效果很好。
按钮代码:。
function calendar() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(spreadsheet.getRange('U70').getValue()).getTime();
var end = new Date(spreadsheet.getRange('X69').getValue()).getTime();
var name = spreadsheet.getRange('U69').getValue()
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
spreadsheet.getRange('X59').setValue('Hooray! Reminder is added to your calendar');
SpreadsheetApp.flush();
Utilities.sleep(5000);
spreadsheet.getRange('x59').clearContent();
}
可能有2个解
解决方案 #1
在您自己的议程中使用人名创建多个议程,
然后把脚本稍微改一下,
function onSpeEdit(e) {
var rg = e.range;
if (rg.getRow() == 4 && rg.isChecked() && rg.getSheet().getName() === "Course") {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(rg.offset(-2,0).getValue()).getTime();
var end = new Date(rg.offset(-1,0).getValue()).getTime();
var name = rg.offset(-3,0).getValue();
var calendName = CalendarApp.getCalendarsByName(rg.offset(1,0).getValue());
calendName[0].createEvent(name, new Date(start), new Date(end));
rg.uncheck();
}
}
并请人们把他们的名字写成如下
你会得到这个
解决方案 #2
要求每个人复制电子表格,从而为他们创建一个新的电子表格
如果需要同步使用importrange
如需阅读,请分享议程
这是允许用户在单元格中放置事件详细信息的代码,他们勾选方框并添加事件。解决方案由 Mike Steelson 提出。
Link -
function onOpen() {
SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
.addItem(' Set up ...', 'myTriggerSetup')
.addToUi();
}
function myTriggerSetup() {
var ssID = SpreadsheetApp.getActiveSpreadsheet().getId()
if (!isTrigger('onSpeEdit')) {
ScriptApp.newTrigger('onSpeEdit').forSpreadsheet(ssID).onEdit().create();
}
}
function isTrigger(funcName) {
var r = false;
if (funcName) {
var allTriggers = ScriptApp.getProjectTriggers();
var allHandlers = [];
for (var i = 0; i < allTriggers.length; i++) {
allHandlers.push(allTriggers[i].getHandlerFunction());
}
if (allHandlers.indexOf(funcName) > -1) {
r = true;
}
}
return r;
}
function onSpeEdit(e) {
var rg = e.range;
if (rg.getRow() == 4 && rg.isChecked() && rg.getSheet().getName() === "Course") {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(rg.offset(-2,0).getValue()).getTime();
var end = new Date(rg.offset(-1,0).getValue()).getTime();
var name = rg.offset(-3,0).getValue();
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
rg.uncheck();
}
}
问题: 事件正在添加到我的默认日历以及用户的日历中。
要求: 它应该被添加到输入详细信息并单击复选框的用户的默认日历中
编辑 1:.
Mike 的解决方案 [1]。
var calendName = CalendarApp.getCalendarsByName('somebody')
我在 sheet 上创建了一个列表,其中包含所有用户的默认日历名称(如 Alex Ab、John Cd、Ewel BM...),并以这种方式更改了两行代码,但事件是未添加。
var calend = CalendarApp.getCalendarsByName('AA51')[0];
calend.createEvent(name, new Date(start), new Date(end));
解决方案[2] = 复制 sheet 并尝试。没用
解决方案 [3] = 将宏添加到按钮有效。此外,不需要触发器。我对触发器感到非常紧张,因为它们突然停止工作。添加一个按钮会是个好主意吗? 我已将 Mike Steelson 的代码添加到按钮中,效果很好。
按钮代码:。
function calendar() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(spreadsheet.getRange('U70').getValue()).getTime();
var end = new Date(spreadsheet.getRange('X69').getValue()).getTime();
var name = spreadsheet.getRange('U69').getValue()
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
spreadsheet.getRange('X59').setValue('Hooray! Reminder is added to your calendar');
SpreadsheetApp.flush();
Utilities.sleep(5000);
spreadsheet.getRange('x59').clearContent();
}
可能有2个解
解决方案 #1
在您自己的议程中使用人名创建多个议程,
然后把脚本稍微改一下,
function onSpeEdit(e) {
var rg = e.range;
if (rg.getRow() == 4 && rg.isChecked() && rg.getSheet().getName() === "Course") {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(rg.offset(-2,0).getValue()).getTime();
var end = new Date(rg.offset(-1,0).getValue()).getTime();
var name = rg.offset(-3,0).getValue();
var calendName = CalendarApp.getCalendarsByName(rg.offset(1,0).getValue());
calendName[0].createEvent(name, new Date(start), new Date(end));
rg.uncheck();
}
}
并请人们把他们的名字写成如下
你会得到这个
解决方案 #2
要求每个人复制电子表格,从而为他们创建一个新的电子表格
如果需要同步使用importrange
如需阅读,请分享议程