Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 工作表的日历事件正在复制-删除不起作用的重复项_Google Apps Script_Google Sheets_Duplicates_Google Calendar Api_Google Sheets Api - Fatal编程技术网

Google apps script 工作表的日历事件正在复制-删除不起作用的重复项

Google apps script 工作表的日历事件正在复制-删除不起作用的重复项,google-apps-script,google-sheets,duplicates,google-calendar-api,google-sheets-api,Google Apps Script,Google Sheets,Duplicates,Google Calendar Api,Google Sheets Api,请参阅下面的代码:它设置为在日历事件时更新。 但事件仍在重复。 你能看看我哪里出错了吗 仅获取新创建的事件-是否有方法按创建日期获取事件(现在) } var events=calendar.getEvents(开始、结束); var eventDetails=[]; var eventarray=新数组(); 对于(var i=0;假设: 您有一个包含日历事件列表中数据的工作表 您需要一个脚本来检索和写入任何新事件,而忽略工作表中已经存在的事件 您可以通过事件的位置、标题和描述来识别事件 解

请参阅下面的代码:它设置为在日历事件时更新。 但事件仍在重复。 你能看看我哪里出错了吗

仅获取新创建的事件-是否有方法按创建日期获取事件(现在)

}
var events=calendar.getEvents(开始、结束);
var eventDetails=[];
var eventarray=新数组();
对于(var i=0;假设:
  • 您有一个包含日历事件列表中数据的工作表
  • 您需要一个脚本来检索和写入任何新事件,而忽略工作表中已经存在的事件
  • 您可以通过事件的
    位置
    标题
    描述
    来识别事件
解决方案: 如果所有这些都正确,则可以执行以下操作:

  • 从日历中检索事件后,使用可检索事件详细信息
  • 如果工作表中有任何旧事件,请使用and(的第二个参数是独占的,因此,如果要比较前三个属性,它应该是
    slice(0,3)
    ,而不是
    slice(0,2)
    ),将它们从
    eventDetails
    数组中筛选出来
  • 如果过滤后的
    eventDetails
    数组不为空(即日历中有新事件),请将这些新事件写入工作表
代码示例:
我认为您正在使用一个非常复杂的代码来完成一项非常简单的任务。您能澄清一下您想要完成什么吗?您想要附加新创建的事件,这些事件仍然不在工作表中(当然,忽略已经存在的事件)?你能提供一份你正在处理的电子表格的副本,没有敏感信息吗?@lamblichus我是脚本的高手,这是一个非常重要的项目。代码对我来说也很复杂。我只想把从日历中添加的新事件放在工作表中。这是一份副本[链接]()我还是不明白你的处境。所以,你正在从日历中检索一些事件(某些日期之间的事件)。您想将这些事件写入工作表。但问题来了:重复的
是什么意思?以前复制到工作表中的事件,因此您不想再次复制它们吗?
行.slice(0,2).join()的目的是什么
在查找这些重复项时?
事件数组
都来自
eventDetails
,因此我不明白您为什么要进行比较(您没有检查以前添加到工作表中的事件)。以及为什么
切片(0,2)
?您是否只需要检查
位置
标题
,就可以看到哪些是重复的?我觉得您的问题很容易解决,但首先需要了解您到底想要完成什么。我想将事件从日历中写入工作表。当新事件添加到日历中时ndar,我希望工作表只将新事件写入工作表,而不是将所有事件重新写入工作表。我尝试了此操作,但它也不起作用:var row=eventDetails[I]var duplicate=false;for(j in eventArray){if(row==eventArray[j]){duplicate=true;}if(复制!){EvialStudi.Press(行)} @ LAMBICHUS您是一个救生员!!!谢谢您!
   } 

   var events = calendar.getEvents(start, end); 
   var eventDetails = []; 


  var eventarray = new Array();
for(var i = 0; i<events.length; i++){ 
    eventDetails.push([events[i].getLocation(), events[i].getTitle(), events[i].getDescription(), events[i].getStartTime()]); 
 
    }
    var startRow =  sheet.getLastRow();
    var startCol = 2; 
    for(var j = 0; j<eventDetails.length; j++){ 
    var tempRange = sheet.getRange(startRow+j,startCol, 1, 4); 
    var eventArray = new Array(eventDetails[j]); 
    tempRange.setValues(eventArray); 
  } 
  //Here lies the problem code//
   for(i in eventDetails){
    var row = eventDetails[i];
    var duplicate = false;
    for(j in eventArray){

      if(row.slice(0,2).join() == eventArray[j].slice(0,2).join()){
        duplicate = true;
      }
    }
    }
    if(!duplicate){
      eventArray.push(row);
      {
  return eventArray;
    ss.sort(2, true);
  }
}
}
function importCalendar(){ 
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); //Target sheet for events
  var calendarName = sheet.getRange('C2').getValue(); //name of calendar ex. calendar@gmailcom
  var start = sheet.getRange('C3').getValue(); //to date
  var end = sheet.getRange('C4').getValue();  //from date  
  var calendar = CalendarApp.getCalendarById(calendarName);
  if(!calendar) calendar = CalendarApp.getCalendarsByName(calendarName)[0];  
  var events = calendar.getEvents(start, end);
  var eventDetails = events.map(event => [event.getLocation(), event.getTitle(), event.getDescription(), event.getStartTime()]);
  var lastRow =  sheet.getLastRow();
  var startCol = 2; // Column where the event list starts
  var oldStartRow = 8; // Row where the event list starts
  var numCols = 4; // Number of event fields
  var numRows = lastRow - oldStartRow + 1;
  if (numRows !== 0) { // If there are events in the sheet, filter the duplicates
    var oldEvents = sheet.getRange(oldStartRow, startCol, lastRow - oldStartRow + 1, numCols).getValues();
    // Filter out duplicates:
    eventDetails = eventDetails.filter(eventRow => oldEvents.every(oldEvent => oldEvent.slice(0,3).join() != eventRow.slice(0,3).join()));    
  }
  if (eventDetails.length != 0) { // Check if there is any new event coming from the Calendar
    sheet.getRange(lastRow + 1, startCol, eventDetails.length, eventDetails[0].length).setValues(eventDetails);
  }
}