在不接收电子表格数据的应用程序脚本中创建事件

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) 方法,它接收的两个参数是:

  1. title 需要是一个 String 所以确保你从电子表格中得到的值是一个字符串。
  2. date in 需要 成为 Date object 因此,如果您编辑单元格,请确保电子表格中的值采用有效的日期格式您必须看到一个日历,如果没有,请转到菜单格式 > 数字 > 日期

Google Sheets 根据单元格的值存储数据,值可能是 NumberBooleanDate 或 [=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();
  }