阻止谷歌脚本复制从工作表转移到日历的事件

Posted

技术标签:

【中文标题】阻止谷歌脚本复制从工作表转移到日历的事件【英文标题】:Stop google script from duplicating events transferred from sheets to calendar 【发布时间】:2021-10-19 20:58:35 【问题描述】:

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

这是我的代码:

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



This is the Sheet With my events

【问题讨论】:

您可能想检查是否已经存在相同的事件,或者在工作表中添加一列作为标志,显示它是否已经创建。 【参考方案1】:
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");
    
  );

【讨论】:

这正是我想要的。看起来我可能过于复杂了?绝对更干净的代码。谢谢!

以上是关于阻止谷歌脚本复制从工作表转移到日历的事件的主要内容,如果未能解决你的问题,请参考以下文章

脚本编辑器中的功能可以正常工作,但不能来自工作表自定义功能

自动填充从工作表到文档的日期并获得不同的时区(谷歌脚本)

Google脚本将电子表格中的工作表复制到新电子表格并在特定单元格后命名新电子表格

将特定数据从工作表复制到工作表

根据单元格值将特定范围而不是整行复制到另一个谷歌工作表

将数据从一个 Excel 工作表复制到另一个 Excel 工作表