GoogleApp脚本。显示当天活动的Google日历脚本

时间:2017-10-10 08:47:33

标签: javascript google-apps-script

我对我正在构建的Google日历脚本有一些疑问。所以我设法编写脚本并将其部署为Web应用程序,但我遇到了一些问题:

1)它应列出所有当前日期事件,但它仅列出当天的一个事件 2)另外,我想只显示事件的标题(它现在正在工作)以及事件的开始时间和结束时间。我设法显示一个标题(events [i] .summary)和事件的开始时间,但是我无法显示事件的结束时间并且更改显示时间的时间格式,例如:下午1点到下午2点。 3)我想要做的是让脚本在没有按下按钮的情况下运行。我希望每次打开发布的Web应用程序或刷新Web应用程序页面时它都能正常工作。

这是脚本代码:

function doGet() {
return HtmlService.createHtmlOutputFromFile('calendarApp');
}


function listEvents() {
var actualDate = new Date();
var endOfDayDate = new      
Date(actualDate.getFullYear(),actualDate.getMonth(),actualDate.getDate(),23,59,59);                                                   
var calendarId = 'primary';
var optionalArgs = {
timeMin: (new Date()).toISOString(),
timeMax: endOfDayDate.toISOString(),
showDeleted: false,
singleEvents: true,
maxResults: 10,
orderBy: 'startTime'
};


var response = Calendar.Events.list(calendarId, optionalArgs);
var events = response.items;


var allEvents = [];
if (events && events.length > 0) {
for (i = 0; i < events.length; i++) {
allEvents.push(events[i].summary + ' ' + events[i].start.dateTime);
}
return allEvents;
} else {
return ['No events found'];
}

这是一个HTML代码:

<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<h1>Calendar App</h1>

<button onclick="listEvents()">List events</button>

<ul id='events'></ul>

<script>
function listEvents() {
 google.script.run
 .withSuccessHandler(function(response){
 var events = response;
 for(var i = 0; i < events.length; i++) {
 document.getElementById('events').innerHTML = '<li>' + response[i] + '</li>';
 }
 })
 .withFailureHandler(function(err){
 console.log(err);
 })
 .listEvents();
};
</script>
</body>
</html>

这是指向实际谷歌scritp的链接:Google Script

提前感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

这是我用来获取接下来5周的日历活动的功能。我将它与webapp一起使用,因此它返回到一个看起来像这个document.getElementById('hotbox').innerHTML=hl; hotbox只是一个div的语句。

function getMyEvents()
{
  var allCals=CalendarApp.getAllCalendars();
  var s=Utilities.formatString('<strong>%s</strong>',Utilities.formatDate(new Date(),Session.getScriptTimeZone(),"E MMM d, yyyy HHmm"))
  var min=60 * 1000;
  var hr=60 * min;
  var day=24 * hr;
  var wk=7 * day;
  var start = new Date(new Date().setHours(0,0,0));
  var end=new Date(start.valueOf() + (5 * wk));//you could make this + day instead of + (5 * wk)
  var incl=['Calendar1Name','Calendar2Name'];//These are different calendar names as I have some special calendars for different functions
  for(var i=0;i<allCals.length;i++)
  {
    if(incl.indexOf(allCals[i].getName())>-1)
    {
      s+=Utilities.formatString('<br /><strong>%s</strong>',allCals[i].getName());
      var events=allCals[i].getEvents(start, end);
      if(events)
      {
        s+='<br><ul>';
        for(j=0;j<events.length;j++)
        {
          var calId=allCals[i].getId();
          var evId=events[j].getId();
          if(events[j].isAllDayEvent())
          {
            s+=Utilities.formatString('<li><strong>%s</strong>-%s %s <input type="checkbox" class="markdone" title="Delete Event" name="delevent" value="%s,%s" /></li>', events[j].getTitle(),'All Day',Utilities.formatDate(events[j].getStartTime(),Session.getScriptTimeZone(),"E MMM d"),calId,evId);
          }
          else
          {
            s+=Utilities.formatString('<li><strong>%s</strong>-%s <input type="checkbox" class="markdone" title="Delete Event" name="delevent" value="%s,%s" /></li>', events[j].getTitle(),Utilities.formatDate(events[j].getStartTime(),Session.getScriptTimeZone(),"E MMM d, HHmm"),calId,evId);
          }
        }
        s+='</ul>';
      }
    }
  }
  s+='<br /><input type="button" value="Delete Selected Events" onClick="delSelectedEvents();" style="width:250px;height:35px;text-align:center;margin:10px 0 10px 0;" />';
  //var ui=HtmlService.createHtmlOutput(s);
  //SpreadsheetApp.getUi().showModelessDialog(ui, 'My Events');
  return s;
}

答案 1 :(得分:0)

这是您修改过的(并且正常工作的)代码。您不需要使用高级Calendar API,因为CalendarApp中提供了您需要的所有内容,包括方便的getEventsForDay()。 它会根据需要显示您打开的所有活动。

代码:

function doGet() {
  return HtmlService.createHtmlOutputFromFile('calendarApp').setTitle('CalendarApp');
}

function listEvents() {
  var today = new Date();
  var cal = CalendarApp.getDefaultCalendar();
  var events = cal.getEventsForDay(today);
  var data = [];
  data.push("Events for today "+Utilities.formatDate(today,Session.getScriptTimeZone(),"MMM dd yyyy"));
  if (events && events.length > 0) {
    for (i = 0; i < events.length; i++) {
      data.push(events[i].getTitle()+' : '+Utilities.formatDate(events[i].getStartTime(),Session.getScriptTimeZone(),"HH:mm")+' - '+Utilities.formatDate(events[i].getEndTime(),Session.getScriptTimeZone(),"HH:mm"))
    }
    return data;
  } else {
    return ['No events found','',''];
  }
}

html&amp;脚本:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body style="font-family:arial,sans;font-size:12pt">
    <h2>Calendar App</h2>
    <div id="events">
    </div>
    <script>
    function listEvents() {
     google.script.run
     .withSuccessHandler(function(events){
     document.getElementById('events').innerHTML = document.getElementById('events').innerHTML+'<p>' + events[0] + '</p>';
     for(var i = 1; i < events.length; i++) {
     document.getElementById('events').innerHTML = document.getElementById('events').innerHTML+'<li>' + events[i] + '</li>';
     }
     })
     .withFailureHandler(function(err){
     console.log(err);
     })
     .listEvents();
    };
    window.onload = listEvents();
    </script>
  </body>
</html>
相关问题