Google Apps 脚本检查重复的日历事件

问题描述 投票:0回答:1

我能够使用下面的代码成功创建一个日历事件,但无法弄清楚为什么它在已经存在的情况下创建另一个日历事件。我已经查看了各种帖子,似乎无法编写代码来不创建另一个日历事件。 我感觉这很简单,但我花了几个小时查看各种帖子和视频,但无法让它发挥作用。

任何删除重复日历条目的指导将不胜感激。以下是用于创建日历事件的数据示例。

 function CreateCalendarEvent() {
  const ID = '1MkimspZROYFPFApQECWHETIwMkWfQ5aizj0Da17cVhs';
  const sheet = SpreadsheetApp.openById(ID).getSheetByName('Database');
  var index = 2; // This indicates start looking at row 2
  var LastRow = sheet.getLastRow(); 
  for (;index<=LastRow; index++){
  var taskTitle = sheet.getRange(index,2,1,1).getValue();
  var taskDesc = "Check On Me"//sheet.getRange(index,3,1,1).getValue();
  var startDate = sheet.getRange(index,1,1,1).getValue();
  var endDate = sheet.getRange(index,1,1,1).getValue();
  var checkOnMe = sheet.getRange(index,7,1,1).getValue();     
        
  if (checkOnMe == "Yes" && taskTitle && startDate && endDate)
  {
   var events = CalendarApp.getCalendarsByName("User_Form")[0].getEvents(startDate, 
   endDate);
   delete_events(events);
   var Calendar = CalendarApp.getCalendarsByName("User_Form") 
 [0].createEvent(taskTitle,startDate,endDate,{description: taskDesc});

  }

 }// End of Loop

 }// End of Create Calendar

function delete_events(events){
 for(var i=0; i<events.length;i++){
      ev.deleteEvent();
 
 }

}
google-apps-script google-calendar-api
1个回答
0
投票

您有一个接受事件数据的 Google 表单。该表单链接到一个电子表格,其中包含一个脚本,该脚本可以使用新的事件数据更新 Google 日历。该脚本由可安装的

onFormSubmit
触发器触发。但脚本总是创建重复的事件。

原因

for (;index<=LastRow; index++){

每次脚本运行时,它都会处理电子表格中的每个项目。因此会出现重复的事件。

解决方案

变化

  • 将脚本的名称更改为
    CreateCalendarEvent(e)
    - 这将确保事件对象可用于脚本。
  • 参考下面的脚本
    • Logger.log(JSON.stringify(e))
      - 仅用于调试;这将在每次运行脚本时显示每个事件对象的值
    • 无循环
    • index
      =最新提交的行
    • taskTitle
      taskDesc
      startDate
      endDate
      checkOnMe
      :值引用由
      index
      指示的行号。另一种方法是使用
      sheet.getDataRange().getValues
      ,然后通过数组值引用变量(使用
      index
      )。

function CreateCalendarEvent(e) {
  
  Logger.log(JSON.stringify(e)) // DEBUG
  
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Database')
 
  // get Event Objects
  var index = e.range.rowStart
  var taskTitle = sheet.getRange(index,2,1,1).getValue();
  var taskDesc = "Check On Me"//sheet.getRange(index,3,1,1).getValue();
  var startDate = sheet.getRange(index,1,1,1).getValue();
  var endDate = sheet.getRange(index,1,1,1).getValue();
  var checkOnMe = sheet.getRange(index,7,1,1).getValue();    
          
  if (checkOnMe == "Yes" && taskTitle && startDate && endDate)
  {
   var events = CalendarApp.getCalendarsByName("User_Form")[0].getEvents(startDate, endDate);
   delete_events(events);
   var Calendar = CalendarApp.getCalendarsByName("User_Form")[0].createEvent(taskTitle,startDate,endDate,{description: taskDesc});
  }
 }// End of Create Calendar

© www.soinside.com 2019 - 2024. All rights reserved.