Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Calendar 如何合并2个google日历以按顺序显示事件?_Calendar_Google Apps Script_Google Sites - Fatal编程技术网

Calendar 如何合并2个google日历以按顺序显示事件?

Calendar 如何合并2个google日历以按顺序显示事件?,calendar,google-apps-script,google-sites,Calendar,Google Apps Script,Google Sites,我正试图用一个我自己通过谷歌脚本创建的显示来替换我谷歌网站上笨重的谷歌日历议程视图 我可以在页面上获得事件详细信息,但我需要显示多个日历-如何确保项目在页面上的顺序正确,并且不按日历分组 我可以: 每次运行脚本时创建临时日历,合并多个日历(注意-我看不到任何创建日历选项) 或者将信息转储到电子表格中,然后从中进行排序 或者以某种方式按时间循环,而不是按日历循环 我认为电子表格是最好的选择-还有其他想法吗 有没有一种简单的方法可以自动将iCal文件复制到电子表格中 George如果PHP和Zend

我正试图用一个我自己通过谷歌脚本创建的显示来替换我谷歌网站上笨重的谷歌日历议程视图

我可以在页面上获得事件详细信息,但我需要显示多个日历-如何确保项目在页面上的顺序正确,并且不按日历分组

我可以:

每次运行脚本时创建临时日历,合并多个日历(注意-我看不到任何创建日历选项)

或者将信息转储到电子表格中,然后从中进行排序

或者以某种方式按时间循环,而不是按日历循环

我认为电子表格是最好的选择-还有其他想法吗

有没有一种简单的方法可以自动将iCal文件复制到电子表格中


George

如果PHP和Zend Gdata库是一个选项,那么您可以获取日历列表提要,然后循环遍历每个日历的事件并将它们放入一个数组中。之后,您可以使用以下命令按开始时间对它们进行排序:

     function cmp( $a, $b )
     {
        if(  $a->when[0]->startTime ==  $b->when[0]->startTime ){ return 0 ; }
        return ($a->when[0]->startTime < $b->when[0]->startTime) ? -1 : 1;
     }

     uasort($allEvents,'cmp');
函数cmp($a,$b)
{
如果($a->when[0]->startTime==$b->when[0]->startTime){return 0;}
返回($a->when[0]->startTime<$b->when[0]->startTime)?-1:1;
}
uasort($allEvents,'cmp');

我已经处理了很多这方面的问题。尤其是在发送多个日历上活动的客人名单电子邮件时。下面的函数将获取日历数组以及开始和结束时间,并将其转换为唯一的
CalendarEvent
对象的单个数组

您可以运行一个版本的代码。您还会发现,它也在那里被评论

你似乎最感兴趣的是分类作品。它包含在
byStart
函数中。有关数组排序的详细信息,请访问
byStart
将适用于任何
CalendarEvent
数组

由于管理日历的枯燥性,Javascript中可用的迭代函数使这项工作变得轻松。MDN有更多关于

这是:

function mergeCalendarEvents(calendars, startTime, endTime) {

  var params = { start:startTime, end:endTime, uniqueIds:[] };

  return calendars.map(toUniqueEvents_, params)
                  .reduce(toSingleArray_)
                  .sort(byStart_);
}

function toCalendars_(id) { return CalendarApp.getCalendarById(id); }

function toUniqueEvents_ (calendar) {
  return calendar.getEvents(this.start, this.end)
                 .filter(onlyUniqueEvents_, this.uniqueIds);
}

function onlyUniqueEvents_(event) {
  var eventId = event.getId();
  var uniqueEvent = this.indexOf(eventId) < 0;
  if(uniqueEvent) this.push(eventId);
  return uniqueEvent;
}

function toSingleArray_(a, b) { return a.concat(b) }

function byStart_(a, b) {
  return a.getStartTime().getTime() - b.getStartTime().getTime();
}
函数合并日历事件(日历、开始时间、结束时间){
var params={start:startTime,end:endTime,uniqueid:[]};
返回calendars.map(toUniqueEvents,params)
.reduce(到singlearray)
.排序(按开始顺序);
}
函数toCalendars_uid{return CalendarApp.getCalendarById(id);}
功能toUniqueEvents(日历){
return calendar.getEvents(this.start、this.end)
.filter(仅限iquieevents,this.uniqueid);
}
仅限功能IQueEvents(事件){
var eventId=event.getId();
var uniqueEvent=this.indexOf(eventId)<0;
if(uniqueEvent)这个.push(eventId);
返回事件;
}
函数toSingleArray(a,b){返回a.concat(b)}
函数byStart(a,b){
返回a.getStartTime().getTime()-b.getStartTime().getTime();
}