事件被添加到两个默认日历 - 我的以及 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

如需阅读,请分享议程