Time 脚本编辑器,自动结束时间

Time 脚本编辑器,自动结束时间,time,editor,google-forms,Time,Editor,Google Forms,完全公开,我绝不是任何类型的程序员。我的图书馆正在寻找一种更简单的方法,让多个地点将事件添加到公共日历中 最后,我偶然发现了一个我能够适应我们需要的东西。但是,他们希望的一个更改是将结束时间默认设置为2小时后。例如,如果事件从1开始,则结束时间自动默认为3 有人能告诉我,为了实现这一点,我需要对脚本进行哪些更改吗?我们用来输入日期的。现在,结束时间是手动输入的,但我认为必须删除,对吗 如果您能帮我解决这个问题,我们将不胜感激 谢谢 //insert your google calendar ID

完全公开,我绝不是任何类型的程序员。我的图书馆正在寻找一种更简单的方法,让多个地点将事件添加到公共日历中

最后,我偶然发现了一个我能够适应我们需要的东西。但是,他们希望的一个更改是将结束时间默认设置为2小时后。例如,如果事件从1开始,则结束时间自动默认为3

有人能告诉我,为了实现这一点,我需要对脚本进行哪些更改吗?我们用来输入日期的。现在,结束时间是手动输入的,但我认为必须删除,对吗

如果您能帮我解决这个问题,我们将不胜感激

谢谢

//insert your google calendar ID
var calendarId = "ID-FOR-TEST-CALENDAR";

//index (starting from 1) of each column in the sheet
var titleIndex = 2;
var descriptionIndex = 3;
var startDateIndex = 4;
var endDateIndex = 5;
var googleCalendarIndex = 6;

/*
find the row where the Google Calendar Event ID is blank or null
The data of this row will be used to create a new calendar event
*/
function findRow(sheet) {
 var sheet = SpreadsheetApp.getActiveSheet();
 var dataRange = sheet.getDataRange();
 var values = dataRange.getValues();

 for (var i = 0; i < values.length; i++) {
 if(values[i][googleCalendarIndex-1]=="" || values[i][googleCalendarIndex-1]==null)
 newEvent(i+1);
 } 
 };


/* 
get the data of the new row by calling getSheetData() and 
create a new Calendar event by calling submitToGoogleCalendar()
*/

function newEvent(row){ 
 var sheet = SpreadsheetApp.getActiveSheet();
 var eventId = submitToGoogleCalendar(getSheetData(sheet,row),null)
 if(eventId!=null) 
 sheet.getRange(row,googleCalendarIndex,1,1).setValue(eventId);
};


/* 
Store the data of a row in an Array
*/

function getSheetData(sheet,row)
{
 var data = new Array();

 data.title=sheet.getRange(row,titleIndex,1,1).getValue();
 data.description=sheet.getRange(row,descriptionIndex,1,1).getValue();

 data.startDate = sheet.getRange(row,startDateIndex,1,1).getValue();
 data.endDate = sheet.getRange(row,endDateIndex,1,1).getValue();

 return data; 
};

/* 
if a cell is edited in the sheet, get all the data of the corresponding row and 
create a new calendar event (after deleting the old event) by calling submitToGoogleCalendar() 
*/

function dataChanged(event){

 var sheet = SpreadsheetApp.getActiveSheet();
 var row = event.range.getRow();

 var eventId = sheet.getRange(row,googleCalendarIndex,1,1).getValue();

 var eventId = submitToGoogleCalendar(getSheetData(sheet,row),eventId)

 if(eventId!=null)
 sheet.getRange(row,googleCalendarIndex,1,1).setValue(eventId);

};


/* 
This function creates an event in the Google Calendar and returns the calendar event ID 
which is stored in the last column of the sheet 
*/
function submitToGoogleCalendar(sheetData,eventId) {
 // some simple validations ;-)
 if(sheetData.title == "" || sheetData.startDate == "" || sheetData.startDate == null)
 return null;

 var cal = CalendarApp.getCalendarById(calendarId);
 var start = new Date(sheetData.startDate);
 var end = new Date(sheetData.endDate);

 // some simple date validations
 if(start > end)
 return null;

 var event = null;

 //if eventId is null (when called by newEvent()) create a new calendar event
 if(eventId==null)
 {
 event = cal.createEvent(sheetData.title, start, end, {
 description : sheetData.description, 
 });
 return event.getId(); 
 }
 /*
 else if the eventid is not null (when called by dataChanged()), delete the calendar event 
 and create a new event with the modified data by calling this function again
 */
 else
 {
 event = cal.getEventSeriesById(eventId);
 event.deleteEventSeries(); 
 return submitToGoogleCalendar(sheetData,null);
 }

 return event.getId();

};
//插入您的谷歌日历ID
var calendarId=“ID-FOR-TEST-CALENDAR”;
//表中每列的索引(从1开始)
var titleIndex=2;
变量描述指数=3;
var startDateIndex=4;
var endDateIndex=5;
var googleCalendarIndex=6;
/*
查找Google日历事件ID为空或空的行
此行的数据将用于创建新的日历事件
*/
函数findRow(表){
var sheet=SpreadsheetApp.getActiveSheet();
var dataRange=sheet.getDataRange();
var values=dataRange.getValues();
对于(变量i=0;i结束)
返回null;
var事件=null;
//如果eventId为null(当newEvent()调用时),则创建一个新的日历事件
if(eventId==null)
{
事件=cal.createEvent(sheetData.title、开始、结束、{
说明:sheetData.description,
});
return event.getId();
}
/*
否则,如果eventid不为null(由dataChanged()调用时),则删除日历事件
并通过再次调用此函数,使用修改后的数据创建一个新事件
*/
其他的
{
event=cal.getEventSeriesById(eventId);
deleteEventSeries();
返回submitToGoogleCalendar(sheetData,null);
}
return event.getId();
};

我相信您不用亲自尝试,也可以这样做:

function submitToGoogleCalendar(sheetData,eventId) {
  var cal = CalendarApp.getCalendarById(calendarId);
  var start = new Date(sheetData.startDate);
  var end = new Date(sheetData.endDate);
  end.setHours(start.getHours() + 2);
…其中最后一行是添加到原始脚本中的新行


对于您的问题,是否应该删除结束时间,我会说是的,应该删除。

非常感谢。它部分起作用。当我从结束日期删除时间选项时,脚本不再将事件ID添加到电子表格中。但是,如果我将时间和您提供的附加代码保留在那里,我可以在表单中输入任何时间,并且结束时间将默认为2小时后。诚然,如果用户必须手动键入结束时间,它就无法实现此目的。您不再需要
sheetData.endDate
参考。如果从Google表单中删除结束日期,也可以删除脚本中的引用,只依赖于开始日期。只需更改定义变量的行,如下所示:
var end=newdate(sheetData.startDate)成功了!感谢您抽出时间帮助解决此问题。非常感谢!