将多个Google日历提取到单个Google工作表 [英] Extract multiple Google calendars to single Google sheet

查看:335
本文介绍了将多个Google日历提取到单个Google工作表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Google脚本从资源日历中提取数据。该脚本按预期提取单个日历,但我想将多个资源日历提取到1个工作表中。有人能指引我朝着正确的方向吗?我已经着眼于创建一个包含多个日历到'mycal'的数组,但是我无法运行它。谢谢

I'm using a Google script to extract data from a resource calendar. The script works as intended to extract a single calendar, but I would like to extract multiple resource calendars into 1 sheet. Can someone point me in the right direction? I've looked at creating an array to include multiple calendars into 'mycal', but I couldn't get it to run. Thanks

function export_gcal_to_gsheet(){

var mycal = "engelska.se_xxxx@resource.calendar.google.com";
var cal = CalendarApp.getCalendarById(mycal);

var today = new Date();
var events = CalendarApp.getCalendarById(mycal).getEventsForDay(today);

var sheet = SpreadsheetApp.getActiveSheet();

sheet.clearContents();  

var header = [["Calendar Address", "Event Title", "Event Description", "Event Location", "Event Start", "Event End", "Calculated Duration", "Visibility", "Date Created", "Last Updated", "MyStatus", "Created By", "All Day Event", "Recurring Event"]]
var range = sheet.getRange(1,1,1,14);
range.setValues(header);

for (var i=0;i<events.length;i++) {
var row=i+2;
var myformula_placeholder = '';
var details=[[mycal,events[i].getTitle(), events[i].getDescription(), events[i].getLocation(), events[i].getStartTime(), events[i].getEndTime(), myformula_placeholder, ('' + events[i].getVisibility()), events[i].getDateCreated(), events[i].getLastUpdated(), events[i].getMyStatus(), events[i].getCreators(), events[i].isAllDayEvent(), events[i].isRecurringEvent()]];
var range=sheet.getRange(row,1,1,14);
range.setValues(details);

var cell=sheet.getRange(row,7);
cell.setFormula('=(HOUR(F' +row+ ')+(MINUTE(F' +row+ ')/60))-(HOUR(E' +row+ ')+(MINUTE(E' +row+ ')/60))');
cell.setNumberFormat('.00');  

}
}


推荐答案

如果你将mycal变成一个数组,你将需要第二个循环来遍历该数组,并且基于mycal的变量赋值将需要在该循环中。你已经拥有的事件循环也需要在循环中。由于每个日历中的事件数量可能不同,因此维护行计数器的最佳方式是在两个循环之前声明它,并在写入行之后将其增加。

If you make mycal into an array you will need a second loop to step thru that array and the variable assignment based on mycal will need to be in that loop. the events loop you already have will also need to be inside that loop. Because the number of events in each calendar could be different the best way to maintain the row counter is to declare it before both loops and increment it after you write to a row.

function export_gcal_to_gsheet(){


  var mycal = ["engelska.se_xxxx@resource.calendar.google.com",
             "calenderaddress2",
             "calenderaddress3",
             "calenderaddress4"];//note , between address, no , after last




  //here we do all the things that need to be done only once.

  var today = new Date();
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clearContents();  

  var header = [["Calendar Address", "Event Title", "Event Description", "Event Location", "Event Start", "Event End", "Calculated Duration", "Visibility", "Date Created", "Last Updated", "MyStatus", "Created By", "All Day Event", "Recurring Event"]]
  var range = sheet.getRange(1,1,1,14);
  range.setValues(header);


  var row=2;// this needs to be outside the loops in order to use it as a counter in nested loops


  for (var j = 0; j< mycal.lengh; j++){
    //here we do the things we do once per calander

    var events = CalendarApp.getCalendarById(mycal[j]).getEventsForDay(today);//refer to the calender in mycal based on loop counter
    var cal = CalendarApp.getCalendarById(mycal[j]);//refer to the calender in mycal based on loop counter
    //incerting a header for each calander would be done here. make sure to increment row

    for (var i=0;i<events.length;i++) {

      var myformula_placeholder = '';
      var details=[[mycal,events[i].getTitle(), events[i].getDescription(), events[i].getLocation(), events[i].getStartTime(), events[i].getEndTime(), myformula_placeholder, ('' + events[i].getVisibility()), events[i].getDateCreated(), events[i].getLastUpdated(), events[i].getMyStatus(), events[i].getCreators(), events[i].isAllDayEvent(), events[i].isRecurringEvent()]];
      var range=sheet.getRange(row,1,1,14);
      range.setValues(details);

      var cell=sheet.getRange(row,7);
      cell.setFormula('=(HOUR(F' +row+ ')+(MINUTE(F' +row+ ')/60))-(HOUR(E' +row+ ')+(MINUTE(E' +row+ ')/60))');
      cell.setNumberFormat('.00');  

      row++; //increment row counter.

    }

  }
}

这篇关于将多个Google日历提取到单个Google工作表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆