【问题标题】:Cannot create an all day event series into google calendar, from google forms无法从谷歌表单将全天事件系列创建到谷歌日历中
【发布时间】:2015-03-09 17:10:33
【问题描述】:

我已经尝试了好几天,阅读其他帖子,使用其他接近相同目的但没有任何效果的脚本。我正在尝试制作一个脚本,该脚本将从基于网络的谷歌表单中获取信息,以及一个月/一天,并将其转换为日历中重复发生的事件。

它现在终于发布到日历上,但每个事件都在 2015 年 12 月 31 日之前出现未定义 - 没有进一步的信息,尽管至少它正在再次发生。

在我尝试理解此编码及其操作方法时,我们将不胜感激。谢谢!

//this is the ID of the calendar to add the event to, this is found on the calendar settings page of the calendar in question
var calendarId = "id@group.calendar.google.com";

//below are the column ids of that represents the values used in the spreadsheet (these are non zero indexed)
var startDtId = 5;
var endDtId = 5;
var titleId = 2;
var descId = 3;
var formTimeStampId = 1;

function getLatestAndSubmitToCalendar() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();
  var lr = rows.getLastRow();
  var startDt = sheet.getRange(lr,startDtId,1,1).getValue();
  //set to first hour and minute of the day.
//  startDt.setHours(0);
//  startDt.setMinutes(00);
  var endDt = sheet.getRange(lr,endDtId,1,1).getValue();
  //set endDt to last hour and minute of the day
//  endDt.setHours(23);
//  endDt.setMinutes(59);
//  var subOn = "Submitted on :"+sheet.getRange(lr,formTimeStampId,1,1).getValue();
  var desc = sheet.getRange(lr,descId,1,1).getValue();
  var title = sheet.getRange(lr,titleId,1,1).getValue();
  createAllDayEvent(calendarId,title,startDt,endDt,recurrence,loc,desc);
}​

  function createAllDayEventSeries(calendarId,title,startDt,endDt,recurrence,loc,desc) {
  var cal = CalendarApp.getCalendarById('id@group.calendar.google.com');
  var start = new Date(startDt);
  var end = new Date(endDt);
  var loc = descId;
  var desc = "Happy Birthday "+titleId+" of "+descId;
// Creates a rule that recurs every week for ten weeks.
  var recurrence = CalendarApp.newRecurrence().addYearlyRule();

  var event = cal.createAllDayEventSeries(title, start, recurrence, {
      description : desc,
      location : loc
  });
};

【问题讨论】:

  • 您是否确保与填写表格的任何人共享日历?由于脚本必须经过授权,并且表单的提交是通过帐户进行的,因此他们必须有权访问日历。

标签: google-apps-script scripting google-calendar-api google-forms


【解决方案1】:

我创建了一个表单并使用以下代码进行了测试:

// Column data constants
var nameCol = 2;
var birthdayCol = 3;
var descriptionCol = 4;
var locationCol = 4;
var calendarId = '[id]@group.calendar.google.com';

/* Send Confirmation Email with Google Forms */

function Initialize() {
  var triggers = ScriptApp.getProjectTriggers();
  for (var i in triggers) {
    ScriptApp.deleteTrigger(triggers[i]);
  }

  ScriptApp.newTrigger("CreateCalendarEvent")
  .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
  .onFormSubmit()
  .create();
}

function createEvent() {
  var ss = SpreadsheetApp.getActiveSheet();
  var rows = ss.getDataRange();
  var lr = rows.getLastRow();
  var start = ss.getRange(lr,birthdayCol,1,1).getValue();
  start.setHours(0);
  start.setMinutes(00);

  var title = ss.getRange(lr,nameCol,1,1).getValue() + " Birthday";
  var desc = ss.getRange(lr,descriptionCol,1,1).getValue();
  var loc = ss.getRange(lr,locationCol,1,1).getValue();

  var recurrence = CalendarApp.newRecurrence().addYearlyRule();

  Logger.log("accessing calendar");
  var externalCalendar = CalendarApp.getCalendarById(calendarId);

  externalCalendar.createAllDayEventSeries(title, start, recurrence,         {
      description : desc,
      location : loc
  });
}

function getRelativeDate(daysOffset, hour) {
  var date = new Date();
  date.setDate(date.getDate() + daysOffset);
  date.setHours(hour);
  date.setMinutes(0);
  date.setSeconds(0);
  date.setMilliseconds(0);
  return date;
}

function CreateCalendarEvent(e) {
  try {
    Logger.log("creating event");
    createEvent();
  } catch (e) {
    Logger.log(e.toString());
  }

}

这会在提交表单时设置触发功能,请确保将日历 id 的值更改为日历提供的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多