Javascript 从google表单发布到google日历的脚本。卡在授权循环中

Javascript 从google表单发布到google日历的脚本。卡在授权循环中,javascript,google-apps-script,Javascript,Google Apps Script,我对谷歌应用程序脚本完全陌生,试图编写一个简单的脚本,当从表单中添加新行时,它将从谷歌电子表格中提取信息,并使用该信息创建新的日历事件。以下是我到目前为止所做的(日历和电子表格ID已删除) 当我运行代码时,我被要求在循环中反复授权应用程序。触发器设置为在表单提交时从电子表格运行函数。我认为问题可能与我如何调用电子表格,然后将其设置为活动状态有关,但我试图直接从文档中复制该代码。另一个问题可能是格式化日期,因为这一部分也很混乱(对js来说相对较新) 当您从电子表格中检索日期时,它们已经是JavaS

我对谷歌应用程序脚本完全陌生,试图编写一个简单的脚本,当从表单中添加新行时,它将从谷歌电子表格中提取信息,并使用该信息创建新的日历事件。以下是我到目前为止所做的(日历和电子表格ID已删除)


当我运行代码时,我被要求在循环中反复授权应用程序。触发器设置为在表单提交时从电子表格运行函数。我认为问题可能与我如何调用电子表格,然后将其设置为活动状态有关,但我试图直接从文档中复制该代码。另一个问题可能是格式化日期,因为这一部分也很混乱(对js来说相对较新)

当您从电子表格中检索日期时,它们已经是JavaScript日期对象,您可以使用它来获取所需的内容,请参见下面的示例代码

此外,无需激活电子表格即可使用,
openById
就足够了

function addToCalendar() {

  //Get the spreadsheet by its id, set it as active, then select the last row to always have the most recent
  var spreadSheet = SpreadsheetApp.openById("SS ID");
  var sheet = spreadSheet.getSheets()[0];// 0 for first sheet, 1 for second ...
  var row = sheet.getLastRow();

  //Declare variables for the required text fields and set them equal to corresponding cell values
  var name = sheet.getRange(row, 2).getValue();
  var subject = sheet.getRange(row, 3).getValue();
  var date = sheet.getRange(row, 4).getValue();
  var startTime = sheet.getRange(row, 5).getValue();
  var endTime = sheet.getRange(row, 6).getValue();
  var year = date.getFullYear();
  var month = date.getMonth()-1;
  var day = date.getDate();
  var startTime = new Date(sheet.getRange(row, 5).getValue().setFullYear(year,month,day));// keep hours and minutes but set day and month
  var endTime = new Date(sheet.getRange(row, 6).getValue().setFullYear(year,month,day));// keep hours and minutes but set day and month
  Logger.log('start : '+startTime+'  -  end : '+endTime);
  //Call the calendar and add the event (uncomment below when you have filled with your own calendar data)
//  var calendar = CalendarApp.getCalendarById('CALENDAR ID');
//  var event = calendar.createEvent(name, startTime,endTime);
//  Logger.log('Event ID: ' + event.getId());
}
function addToCalendar() {

  //Get the spreadsheet by its id, set it as active, then select the last row to always have the most recent
  var spreadSheet = SpreadsheetApp.openById("SS ID");
  var sheet = spreadSheet.getSheets()[0];// 0 for first sheet, 1 for second ...
  var row = sheet.getLastRow();

  //Declare variables for the required text fields and set them equal to corresponding cell values
  var name = sheet.getRange(row, 2).getValue();
  var subject = sheet.getRange(row, 3).getValue();
  var date = sheet.getRange(row, 4).getValue();
  var startTime = sheet.getRange(row, 5).getValue();
  var endTime = sheet.getRange(row, 6).getValue();
  var year = date.getFullYear();
  var month = date.getMonth()-1;
  var day = date.getDate();
  var startTime = new Date(sheet.getRange(row, 5).getValue().setFullYear(year,month,day));// keep hours and minutes but set day and month
  var endTime = new Date(sheet.getRange(row, 6).getValue().setFullYear(year,month,day));// keep hours and minutes but set day and month
  Logger.log('start : '+startTime+'  -  end : '+endTime);
  //Call the calendar and add the event (uncomment below when you have filled with your own calendar data)
//  var calendar = CalendarApp.getCalendarById('CALENDAR ID');
//  var event = calendar.createEvent(name, startTime,endTime);
//  Logger.log('Event ID: ' + event.getId());
}