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

时间:2016-08-05 22:29:08

标签: google-apps-script google-sheets google-calendar-api

我无法让这个工作,我迷路了,我搜索并搜索了一个答案,我无法看到导致此失败的原因,我从电子表格中提取数据并尝试将其作为事件添加到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 个答案:

答案 0 :(得分:0)

在第3行,当变量titlestartTimeundefined时,您调用方法createAllDayEvent(),只需移动第3行(您在其中定义{{ 1}})在带有这些参数的行var eventcall your function getsheet()之后。

修改

您正在使用方法createAllDayEvent(title, date),它收到的两个参数是:

  1. var description = finval5必须是String,因此请确保您从电子表格中获取的值是字符串。
  2. 需要中的
  3. titleDate object,因此请确保电子表格中的值采用有效的日期格式,如果编辑单元格,则必须查看日历,如果没有进入菜单格式>数字>日期
  4. Google表格根据单元格的值存储数据,值可以是dateNumberBooleanDate类型(空单元格将返回一个空字符串)。当脚本使用这些值时,Apps脚本会将它们视为JavaScript中的相应数据类型。

    编辑2:

    正如我上面提到的,方法createAllDayEvent(title, date)在第二个参数中收到Date object,现在您使用PropertiesService来存储日期值,但此服务将值存储为字符串,所以现在在使用日期创建事件之前,需要将其转换为Date对象,如下所示:

    String

答案 1 :(得分:0)

它可能采用您的格式。

尝试使用此代码段进行测试:

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)google apps script calendar sample的文档,了解一些代码实现和正确的代码格式。

希望它有所帮助!

答案 2 :(得分:0)

谢谢你们 - 问题解决了! 两个问题 - 1 - 虽然起初我有正确的格式,我没有把“日期”称为[日期], 2-i没有为add事件调用任何函数,只是变量。 固定- 将“日期”转换为[日期] 将事件2删除为变量并将其称为“事件”创建事件() 并单独运行

 function run(){
  getsheet();
   getcal2();
  }