如何修改我的脚本以遍历多个日历而不是一个日历

时间:2019-01-26 21:08:01

标签: javascript loops google-apps-script

我在Google工作表中使用此脚本来搜索命名日历,以查找标题中提到特定客户名称的事件(大部分跟踪项目的日期)。这对我来说搜索一个日历很好,但是我想一次搜索一组日历并从中获取所有事件,然后将所有结果打印到Google工作表中。我觉得这很简单,但是我不知道如何使用getEvent函数

正确地遍历数组。

编辑:我能够弄清楚,下面的脚本对搜索很多日历以查找该事件中匹配字符串的所有事件对我来说非常有用。该脚本从添加到工作表ui的菜单项中运行,并显示一个弹出框供用户传递搜索字符串。搜索将在整个事件对象中检查字符串,然后您可以传递匹配,多重匹配,否定等。

这是工作代码:

// add menu option for 
function onOpen () {
var ui = SpreadsheetApp.getUi()
ui.createMenu('Custom Actions')
  .addItem('New Calendar Search', 'main')
  .addToUi()
}

function main(){
var sheet = SpreadsheetApp.getActiveSheet();
sheet.clearContents();
var header = [["Calendar Address", "Event Title", "Event Location", "Event Start", "Event End"]]
var range = sheet.getRange(1,1,1,5);
range.setValues(header);
// var mycals is an array of google calendar id's; for gsuite, this is the email address of the user which calendar you will be viewing.
var mycals = ['email1@myemail.com','email2@myemail.com','email3@myemail.com']

var ui = SpreadsheetApp.getUi()
var response = ui.prompt('Enter your search string:')
var custname = response.getResponseText()
for (var j=0;j<mycals.length;j++) {
  var cal = CalendarApp.getCalendarById(mycals[j]);
  // error handling in case you don't have access to any specified calendar
  if (!cal) { continue; }
  var events = cal.getEvents(new Date("January 1, 2018 00:00:00 EST"), new Date("December 31, 2018 23:59:59 EST"), {search: custname});
  for (var i=0;i<events.length;i++) {
    var row = sheet.getLastRow() + 1
    var details=[[events[i].getOriginalCalendarId(),events[i].getTitle(), events[i].getLocation(), events[i].getStartTime(), events[i].getEndTime()]];
    var range=sheet.getRange(row,1,1,5);
    range.setValues(details);
  }
sheet.sort(4)
}
}

1 个答案:

答案 0 :(得分:0)

  

无论我如何处理此代码,我都只会收到错误“ TypeError:无法调用null的方法“ getEvents”(第8行,文件“代码”)”。

代替

otherFunction(){
    this.GetApi.startFunction(entry).then(result => {
        console.log(result)
    }, err => {
        console.log(err);
    });
}

尝试

var mycal = "my.email@myworkdomain.com";
var cal = CalendarApp.getCalendarById(mycal);

注意:如果其他用户未与有效用户共享日历,则无法使用var cal = CalendarApp.defaulCalendar(); 访问其他用户的默认日历。

参考