在复选框的帮助下添加日历事件

Add calendar event with the help of checkbox

参考这个问题 -

全部修改后的代码:

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() == 57 && rg.isChecked() && rg.getSheet().getName() === "Course") {
  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));
    rg.uncheck();
  }
}

我的要求:
用户将填写所有 3 个单元格以获取事件详细信息。然后,他们将在复选框上打勾,应该添加事件,并且复选框也应该取消勾选。然后,另一个用户将再次执行相同的过程。

我的问题:
它在虚拟 sheet 中工作,但在主 sheet.My 中不工作,上面的代码是按照主 sheet.

虚拟 Sheet: https://docs.google.com/spreadsheets/d/1_f_dujqIvmkXXLAqyandEmrWOxgskIfk9KTSKw28UuA/edit#gid=0

谢谢: 谢谢 Mike 和 Tanaike 为帮助我所做的惊人努力。

1。按如下方式重命名您的函数名称。

在这种情况下,您还可以使用除onEdit之外的其他函数名称。关于这个的原因,大家可以在.

看到
function installedOnEdit(e){
  var rg = e.range;
  if(rg.getA1Notation() === "Z56" && rg.isChecked() && rg.getSheet().getName() === "Course"){
    calendar(); //calling calendar function
    rg.uncheck()
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course').getRange('X57').setValue('Event has been added to your Calendar')//Putting message in cell x57;
  }
}

2。将可安装的 OnEdit 触发器安装到重命名的函数。

您可以在 the official document 查看如何手动安装它。

如果需要使用脚本,也可以使用以下脚本。

function installTrigger() {
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  ScriptApp.newTrigger("installedOnEdit").forSpreadsheet(ss).onEdit().create();
}

通过此流程,installedOnEdit 由可安装的 OnEdit 触发器 运行。当您使用它时,请勾选复选框。这样,installedOnEdit 就是 运行 而 CalendarApp.getDefaultCalendar() 就是 运行。

注:

  • 在这种情况下,它假定您的 calendar()onEdit 中的 if 语句工作正常。请注意这一点。

参考:

已添加:

我看到了您提供的示例电子表格。当我看到它时,“名称”、“开始日期”、“结束日期”、“添加到日历”的值是单元格“B1:B4”。但在您的脚本中,这些值未被使用。我认为你的新问题是由于这个。请使用示例电子表格修改您的脚本,如下所示。

修改后的脚本:

function calendar() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
  var start = new Date(spreadsheet.getRange('B2').getValue()).getTime();
  var end = new Date(spreadsheet.getRange('B3').getValue()).getTime();
  var name = spreadsheet.getRange('B1').getValue()

  var calend = CalendarApp.getDefaultCalendar();
  calend.createEvent(name, new Date(start), new Date(end));
}

function installedOnEdit(e) {
  var rg = e.range;
  if (rg.getA1Notation() === "B4" && rg.isChecked() && rg.getSheet().getName() === "Course") {
    calendar(); //calling calendar function
    rg.uncheck();
  }
}

function installTrigger() {
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  ScriptApp.newTrigger("installedOnEdit").forSpreadsheet(ss).onEdit().create();
}
  • 在这种情况下,当 installTrigger() 安装可安装的 OnEdit 触发器时,选中单元格“B4”的复选框时,将创建事件。

试试这个

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();
  }
}