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

Dus*_*llo 3 google-calendar-api form-submit google-apps-script

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

尽量让孩子们(无法访问Google Apps)快速轻松地使用此表单安排测试.

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

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

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

将继续努力寻找/学习必要的代码,但非常欣赏正确的方向.

干杯,

Ser*_*sas 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+')'});
}
Run Code Online (Sandbox Code Playgroud)

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

重要说明:不要在没有发送表单的情况下从脚本编辑器中尝试此代码,它将无法正常工作!(显然,e将是未定义的)

  • 谢谢你的建议,但没有必要...如果你很开心那么我也是:-)请考虑接受答案,谢谢. (2认同)