首页 > 解决方案 > 阻止谷歌脚本复制从工作表转移到日历的事件

问题描述

我已经搜索过,这个话题之前已经出现过,但我还没有找到任何适合我的东西。我有一个谷歌表格文档,我在其中跟踪事件和这些事件开始的日期。我设置了一些脚本来将我在工作表文档中创建的任何事件转移到日历中。我遇到的问题是脚本运行时,它会添加工作表上的所有内容。这是一个问题,因为它每次运行时都会创建重复项。有没有办法进行设置,以便我的脚本只添加我的日历上尚不存在的新事件。

这是我的代码:

function createCalendarEvent(){
  var ctCalendar = CalendarApp.getCalendarById('v6utsrj3up5givjadrd1ce83qs@group.calendar.google.com');
  var sheet = SpreadsheetApp.getActiveSheet();
  var event = sheet.getDataRange().getValues();
  var startRow = 2;
  var numColumns = sheet.getLastColumn();
  var complete ="Added";
  var showCheck = [];
  event.splice(0,1);

for(x=0; x<event.length;x++){
  var showNumber = [9];
  if(stopDuplicate == complete){
    showCheck.push(showNumber);
  }
  var newEvent = event[x];
  var eventName = newEvent[10];
  var eventStart = newEvent[11];
  var stopDuplicate = newEvent[14]

if(showCheck.indexOf(showNumber == 0)) 
{
  showCheck.push(showNumber);
  var currentCell = sheet.getRange(startRow + x, numColumns );
  ctCalendar.createAllDayEvent(eventName, eventStart);
  currentCell.setValue(complete); 
 }
}

}

这是我的活动表

标签: javascriptgoogle-apps-scriptgoogle-sheetsduplicatesgoogle-calendar-api

解决方案


function createCalendarEvent() {
  const cal = CalendarApp.getCalendarById('v6utsrj3up5givjadrd1ce83qs@group.calendar.google.com');
  const sh = SpreadsheetApp.getActiveSheet();
  const numColumns = sh.getLastColumn();
  const evs = sh.getRange(sr, 1, sh.getLastRow() - sr + 1, numColumns).getValues();
  const sr = 2;
  evs.forEach((r,i) => {
    if(r[14] != "Done") {
      cal.createAllDayEvent(r[10],r[11]);
      sh.getRange(i + sr, 15).setValue("Done");
    }
  });
}

推荐阅读