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