用于将表单提交到日历事件的Google脚本

时间:2014-11-09 18:40:28

标签: google-apps-script google-calendar-api form-submit

学校老师使用我的个人Google帐户创建表单并将日历发布到我的班级网站。

尽量让孩子们(无法访问Google Apps)快速轻松地安排化妆测试using this form.

快速而肮脏的胜利将是将他们的表单提交添加到我的日历作为全天活动,其中包含描述字段中的详细信息。然后,我可以根据请求的具体时间查看和编辑活动(我只在表单上提供了某些时间选项作为下拉选项。)

一个美丽而优雅的解决方案是让脚本在下拉列表中显示的日期和时间上写下事件,但我认为这需要巫术......

表单将对电子表格的回复写得很好,电子邮件通知也可以,但无法创建日历事件。

将继续尝试寻找/学习必要的代码,但我们非常欣赏正确的方向。

干杯,

1 个答案:

答案 0 :(得分:7)

这是一个"巫术礼物"既然你是老师(我也是),而不是程序员(我也不是),希望能够完全满足你的需要。

编辑:我在说明中添加了提交日期/时间

function createCalEvent(e) {
  Logger.log(e);
  // this will return something like this :
  /*
  {values=[11/9/2014 22:30:00, serge, test descr, 11/7/2014, Before school | 7:30], 
  namedValues={Your Full Name=[serge], Work to Make Up=[test descr], Date You Will Make Up Assignment=[11/7/2014], 
  Makeup Time=[Before school | 7:30], Timestamp=[11/9/2014 22:30:00]}, range=Range, source=Spreadsheet, authMode=FULL}
  */
  var cal = CalendarApp.getCalendarById("h22nevo15tm0nojb6ul4hu7ft8@group.calendar.google.com");// replace with the right calendar ID, this one is for test (and is public)
  var name = e.namedValues["Your Full Name"][0];
  var descr = e.namedValues["Work to Make Up"][0];
  var submitTime = e.namedValues["Timestamp"][0];
  var date = e.namedValues["Date You Will Make Up Assignment"][0].split('/');
  var time = e.namedValues["Makeup Time"][0].split('|')[1].split(':');
  Logger.log(name+' '+descr+' '+date+' '+time); // this will return  serge test descr 11,7,2014  7,30
  var startTime = new Date(date[2],date[0]-1,date[1]);
  startTime.setHours(time[0],time[1],0,0);
  endTime = new Date(startTime.getTime()+3600000); //assuming event is 1 hour long
  Logger.log('start='+startTime+'  end='+endTime);
  cal.createEvent('name = '+name, startTime, endTime, {'description':descr+' (subimitted on '+submitTime+')'});
}

在提交表单时,您必须设置触发器(在表单提交上)以触发该功能

重要提示:不要在不发送表单的情况下从脚本编辑器中尝试此代码,它不会工作! (显然,e将是未定义的)