需要帮助找出代码以删除由图纸数据创建的日历项目

时间:2019-07-05 16:09:14

标签: google-apps-script google-sheets google-calendar-api

我已经使用Google表格编写了一个内容管理系统,该系统可以将作业写入Google日历。触发器设置为手动运行,因为任何Google触发器都会在范围内发生任何变化时重新填充日历项(我找不到解决方法)。因此,每个项目都有一个唯一的ID。这很好用,尽管如果某些更改您必须再次运行脚本,但该菜单内置在UI中。因此,这还不错。您将看到我还构建了一个用于删除事件的UI菜单项。我也想手动运行它。此CMS有两页:一是正在进行的项目,这是填充项。另一个称为“完成的项目”。它具有所有相同的数据,但是当项目完成时,我有第二个脚本将完成时将其移动到Completed Projects工作表中(这是基于字符串的,我相信目标设置为onEdit,但是它作品)。理想情况下,我想通过使用UI菜单运行脚本(手动触发,坦率地说是我想要的)或在将其移至“完成的项目”表时删除日历项。这就是我遇到问题的地方。

我无法找到找到标识符的逻辑。我当时想,这样做的方法是让它查看已完成文件夹中的唯一ID(项目完成后它会随之移动),然后从UI菜单中手动运行删除操作。如果找到该ID,则应删除日历项目。该脚本出现在两个工作表的第7行(H列)中。我试图使它在该工作表和该行中找到数据,然后使用deleteEvent类调用该值,并在触发脚本时删除事件。该脚本不会产生错误,但是也不会删除日历项。这是代码:

function onOpen(e) {
  SpreadsheetApp.getUi()
      .createMenu('Calendar Actions')
      .addItem('Export Assignments', 'exportEvents')
      .addSeparator()
      .addItem('Delete Assignments', 'deleteEvents')
      .addToUi();
};


function exportEvents() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var headerRows = 1;
  var range = sheet.getDataRange();
  var data = range.getValues();
  var calId = "Calendar ID";
  var cal = CalendarApp.getCalendarById(calId);
  for (i=0; i<data.length; i++) {
    if (i < headerRows) continue;
    var row = data[i];
    var date = new Date(row[4]);
    var title = row[0];
    var tstart = new Date(row[4]);
    var assignee = row [2]
   var tstop = new Date(row[5]);
   var id = row[7];             

    try {
      var event = cal.getEventSeriesById(id);
    }
    catch (e) {

    }
    if (!event) {
      var newEvent = cal.createAllDayEvent(title, tstart, tstop, {description:assignee}).getId();
      row[7] = newEvent;

    }
    else {
      event.setTitle(title);
      event.setDescription(assignee);


      var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
      event.setRecurrence(recurrence, tstart, tstop);
    }
    debugger;
  }

  range.setValues(data);
}

function deleteEvents() {
 var sheet = SpreadsheetApp.getActiveSheet();
  var headerRows = 1;
  var range = sheet.getDataRange();
  var data = range.getValues();
  var calId = "Calendar ID";
  var cal = CalendarApp.getCalendarById(calId);
  for (i=0; i<data.length; i++) {
    if (i < headerRows) continue;
    var row = data[i];
    var date = new Date(row[4]);
    var title = row[0];
    var tstart = new Date(row[4]);
    var assignee = row [2]
   var tstop = new Date(row[5]);
   var id = row[7];             

    try {
      var event = cal.getEventSeriesById(id);
    }
    catch (e) {
    }

    if (!event) {
  var oldEvent = cal.deleteEvent(title, tstart, tstop, {description:assignee}).getId();
      row[7] = oldEvent;
    }
  }}

有人可以帮我弄清楚我所缺少的内容,因此将其删除了吗?我敢肯定,这只是我没看到的简单事情。谢谢!

1 个答案:

答案 0 :(得分:0)

function deleteEvents() {
  var sheet=SpreadsheetApp.getActiveSheet();
  var headerRows=1;
  var range=sheet.getRange(headerRows + 1,1,sheet.getLastRow(),sheet.getLastColumn());
  var data=range.getValues();
  var cal=CalendarApp.getCalendarById("Calendar ID");
  for (i=0;i<data.length;i++) {
    if(data[i][7]) {
       cal.getEventById(data[i][7]).deleteEvent(); 
    }
  }
}