在不接收电子表格数据的应用程序脚本中创建事件
create event in apps script not receiving spreadsheet data
我无法让它工作,我迷路了,我已经搜索并搜索了答案,但我看不出是什么导致它失败,我正在从电子表格中提取数据并尝试将其作为事件添加到一个 google 日历-
在 getcal() 事件处冻结,说找不到方法 createalldayevent(string,string)-line71
我已经修改了代码,但仍然...
\function to get required information from sheets
and set as script properties to use in later functions//
function getsheet(getsheet){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Calendar Data");
var sheet2 = ss.getSheetByName("call form");
var sheet3 = ss.getSheetByName("Job Summary Sheet");
var getval = sheet2.getRange("A1:A").getValues();
var getlast = getval.filter(String).length;
var finval = sheet2.getRange(getlast, 1).getValues().toString();
var finval2 = sheet1.getRange(getlast, 2).getValues().toString();
var finval3 = sheet1.getRange(getlast, 5).getValues().toString();
var finval4 = sheet3.getRange(getlast, 6).getValues().toString();
var finval5 = sheet3.getRange(getlast, 12).getValues().toString();
var title = finval + '-' + finval4 ;
var startTime = finval3;
var endTime = finval3;
var location = finval2;
var description = finval5;
PropertiesService.getScriptProperties().setProperty('title', title);
PropertiesService.getScriptProperties().setProperty('startTime', startTime);
PropertiesService.getScriptProperties().setProperty('endTime', endTime);
PropertiesService.getScriptProperties().setProperty('location', location);
PropertiesService.getScriptProperties().setProperty('description', description);
Logger.log(title);
Logger.log(startTime);
Logger.log(endTime);
Logger.log(location);
Logger.log(startTime);
Logger.log(description);
}
\\function getsheet() works correctly-
--gets last row of each required sheet and sets information as script properties////
function getcal2(){
getsheet();
var title = PropertiesService.getScriptProperties().getProperty('title');
var Date = PropertiesService.getScriptProperties().getProperty('startTime');
var endTime = PropertiesService.getScriptProperties().getProperty('endTime');
var location = PropertiesService.getScriptProperties().getProperty('location');
var description = PropertiesService.getScriptProperties().getProperty('description');
////freezes at event2/////
var event = CalendarApp.getCalendarById('xxxxxo@group.calendar.google.com');
var event2 =event.createAllDayEvent(title,Date
);
Logger.log('Event ID: ' + event.getId());
Logger.log(title);
Logger.log(startTime);
Logger.log(endTime);
Logger.log(location);
Logger.log(startTime);
Logger.log(description);
}
\\fails at event2-cannot find method-i am new to this
但是你的帮助真的让我理解了很多......我很感激!////
在第 3 行,您使用这些参数调用方法 createAllDayEvent() when the variables title
and startTime
are undefined
, just move the line 3 (where you define the var event
) after the line var description = finval5
or call your function getsheet()。
编辑:
您正在使用 createAllDayEvent(title, date) 方法,它接收的两个参数是:
title
需要是一个 String 所以确保你从电子表格中得到的值是一个字符串。
date
in 需要 成为 Date object 因此,如果您编辑单元格,请确保电子表格中的值采用有效的日期格式您必须看到一个日历,如果没有,请转到菜单格式 > 数字 > 日期
Google Sheets 根据单元格的值存储数据,值可能是 Number
、Boolean
、Date
或 [=21= 类型](空单元格将 return 一个空字符串)。当脚本使用这些值时,Apps 脚本会将它们视为 JavaScript.
中的适当数据类型
编辑 2:
正如我上面提到的,方法 createAllDayEvent(title, date) 在第二个参数中接收 Date object,现在您正在使用 PropertiesService 来存储日期值,但此服务将值存储为字符串,因此现在在使用日期创建事件之前,您需要将其转换为日期对象,如下所示:
var date = PropertiesService.getScriptProperties().getProperty('startTime');
var dateObj = new Date(date); // create the Date Object
var event = CalendarApp.getCalendarById('xxxxxo@group.calendar.google.com');
var event2 = event.createAllDayEvent(title, dateObj);
可能是你的格式。
尝试使用此代码段进行测试:
function setValues() {
var values = {};
values['title'] = 'Lunch Meeting';
values['description'] = 'Lunch Meeting';
return values;
}
function addEvent(){
var data = setValues();
var calendarID = 'primary';
var calendar = CalendarApp.getCalendarById(calendarID)
var event = calendar.createAllDayEvent(data.title,
new Date('August 22, 2016'),
{description: data.title});
Logger.log(data);
}
我使用 primary
作为测试日历 ID。然后使用 setValues()
形成日历事件的详细信息(您可以使用工作表获取值,然后将其分配给 var 值)。请查看 createAllDayEvent(title, date, options)
and google apps script calendar sample 的文档以了解一些代码实现和正确的代码格式。
希望对您有所帮助!
谢谢你们-
问题已解决!!!
两个问题——
1-虽然起初我有正确的格式,但我没有将 "date" 称为 [date],
2-i 没有为添加事件调用任何函数,只是变量。
使固定-
将 "date" 转换为 [日期]
将事件 2 作为变量删除并调用 "event" create event()
和 运行 分开
function run(){
getsheet();
getcal2();
}
我无法让它工作,我迷路了,我已经搜索并搜索了答案,但我看不出是什么导致它失败,我正在从电子表格中提取数据并尝试将其作为事件添加到一个 google 日历- 在 getcal() 事件处冻结,说找不到方法 createalldayevent(string,string)-line71
我已经修改了代码,但仍然...
\function to get required information from sheets
and set as script properties to use in later functions//
function getsheet(getsheet){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Calendar Data");
var sheet2 = ss.getSheetByName("call form");
var sheet3 = ss.getSheetByName("Job Summary Sheet");
var getval = sheet2.getRange("A1:A").getValues();
var getlast = getval.filter(String).length;
var finval = sheet2.getRange(getlast, 1).getValues().toString();
var finval2 = sheet1.getRange(getlast, 2).getValues().toString();
var finval3 = sheet1.getRange(getlast, 5).getValues().toString();
var finval4 = sheet3.getRange(getlast, 6).getValues().toString();
var finval5 = sheet3.getRange(getlast, 12).getValues().toString();
var title = finval + '-' + finval4 ;
var startTime = finval3;
var endTime = finval3;
var location = finval2;
var description = finval5;
PropertiesService.getScriptProperties().setProperty('title', title);
PropertiesService.getScriptProperties().setProperty('startTime', startTime);
PropertiesService.getScriptProperties().setProperty('endTime', endTime);
PropertiesService.getScriptProperties().setProperty('location', location);
PropertiesService.getScriptProperties().setProperty('description', description);
Logger.log(title);
Logger.log(startTime);
Logger.log(endTime);
Logger.log(location);
Logger.log(startTime);
Logger.log(description);
}
\\function getsheet() works correctly-
--gets last row of each required sheet and sets information as script properties////
function getcal2(){
getsheet();
var title = PropertiesService.getScriptProperties().getProperty('title');
var Date = PropertiesService.getScriptProperties().getProperty('startTime');
var endTime = PropertiesService.getScriptProperties().getProperty('endTime');
var location = PropertiesService.getScriptProperties().getProperty('location');
var description = PropertiesService.getScriptProperties().getProperty('description');
////freezes at event2/////
var event = CalendarApp.getCalendarById('xxxxxo@group.calendar.google.com');
var event2 =event.createAllDayEvent(title,Date
);
Logger.log('Event ID: ' + event.getId());
Logger.log(title);
Logger.log(startTime);
Logger.log(endTime);
Logger.log(location);
Logger.log(startTime);
Logger.log(description);
}
\\fails at event2-cannot find method-i am new to this
但是你的帮助真的让我理解了很多......我很感激!////
在第 3 行,您使用这些参数调用方法 createAllDayEvent() when the variables title
and startTime
are undefined
, just move the line 3 (where you define the var event
) after the line var description = finval5
or call your function getsheet()。
编辑:
您正在使用 createAllDayEvent(title, date) 方法,它接收的两个参数是:
title
需要是一个 String 所以确保你从电子表格中得到的值是一个字符串。date
in 需要 成为 Date object 因此,如果您编辑单元格,请确保电子表格中的值采用有效的日期格式您必须看到一个日历,如果没有,请转到菜单格式 > 数字 > 日期
Google Sheets 根据单元格的值存储数据,值可能是 Number
、Boolean
、Date
或 [=21= 类型](空单元格将 return 一个空字符串)。当脚本使用这些值时,Apps 脚本会将它们视为 JavaScript.
编辑 2:
正如我上面提到的,方法 createAllDayEvent(title, date) 在第二个参数中接收 Date object,现在您正在使用 PropertiesService 来存储日期值,但此服务将值存储为字符串,因此现在在使用日期创建事件之前,您需要将其转换为日期对象,如下所示:
var date = PropertiesService.getScriptProperties().getProperty('startTime');
var dateObj = new Date(date); // create the Date Object
var event = CalendarApp.getCalendarById('xxxxxo@group.calendar.google.com');
var event2 = event.createAllDayEvent(title, dateObj);
可能是你的格式。
尝试使用此代码段进行测试:
function setValues() {
var values = {};
values['title'] = 'Lunch Meeting';
values['description'] = 'Lunch Meeting';
return values;
}
function addEvent(){
var data = setValues();
var calendarID = 'primary';
var calendar = CalendarApp.getCalendarById(calendarID)
var event = calendar.createAllDayEvent(data.title,
new Date('August 22, 2016'),
{description: data.title});
Logger.log(data);
}
我使用 primary
作为测试日历 ID。然后使用 setValues()
形成日历事件的详细信息(您可以使用工作表获取值,然后将其分配给 var 值)。请查看 createAllDayEvent(title, date, options)
and google apps script calendar sample 的文档以了解一些代码实现和正确的代码格式。
希望对您有所帮助!
谢谢你们- 问题已解决!!! 两个问题—— 1-虽然起初我有正确的格式,但我没有将 "date" 称为 [date], 2-i 没有为添加事件调用任何函数,只是变量。 使固定- 将 "date" 转换为 [日期] 将事件 2 作为变量删除并调用 "event" create event() 和 运行 分开
function run(){
getsheet();
getcal2();
}