Google Calendar to Google Sheets, Script неправильно подбирает время - PullRequest
1 голос
/ 20 октября 2019

По какой-то причине запускаемый мной скрипт тянет событие раз в час. Если у меня есть время 4 вечера, это поднимает это как 3 вечера. Дата и время события отображаются как CST, но они отображаются неправильно. Нужно ли как-то менять эту строку, чтобы поднять местное время?

Я не уверен, что попробовать. Прямо сейчас дата / время вытягиваются с использованием CST, но вывод из строки скрипта приносит неправильное время. Может ли быть что-то другое, что я должен добавить к этому?

var events = cal.getEvents(new Date("October 20, 2019 00:00:00 CST"), new Date("November 2, 2019 23:59:59 CST"), {search: ''});


var sheet = SpreadsheetApp.getActiveSheet();
// Uncomment this next line if you want to always clear the spreadsheet content before running - Note people could have added extra columns on the data though that would be lost
// sheet.clearContents();  

// Create a header record on the current spreadsheet in cells A1:N1 - Match the number of entries in the "header=" to the last parameter
// of the getRange entry below
sheet.clearContents();
var header = [["EVENT / SHOW", "VENUE / LOCATION", "DELIVERY NOTES", "DATE", "TIME"]]
var range = sheet.getRange(1,1,1,5);
range.setValues(header);


// Loop through all calendar events found and write them out starting on calulated ROW 2 (i+2)
for (var i=0;i<events.length;i++) {
var row=i+2;
var myformula_placeholder = '';
// Matching the "header=" entry above, this is the detailed row entry "details=", and must match the number of entries of the GetRange entry below
// NOTE: I've had problems with the getVisibility for some older events not having a value, so I've had do add in some NULL text to make sure it does not error
var details=[[events[i].getTitle(), events[i].getLocation(), events[i].getDescription(), events[i].getStartTime(), Utilities.formatDate(events[i].getStartTime(), Session.getScriptTimeZone(), "hh:mma")]];
var range=sheet.getRange(row,1,1,5);
range.setValues(details);

Ожидаемые результаты должны дать это тянуть точное время, которое отображается в Календаре Google.

1 Ответ

0 голосов
/ 22 октября 2019

Просто для справки: это код, который я использовал для проверки ваших строк формата.

function runTwo() {
  var ss=SpreadsheetApp.getActive();
  var calA=CalendarApp.getAllCalendars();
  var html='';
  var today=new Date();
  var s=new Date(today.getFullYear(),today.getMonth(),today.getDate());
  var e=new Date(today.getFullYear(),today.getMonth(),today.getDate()+15);
  calA.forEach(function(c){
    var events=c.getEvents(s,e);  
    if(events.length>0) {
      html+=Utilities.formatString('<br />%s<br />',c.getName());
    }
    html+='<style>th,td{border:1px solid black;}</style><table>';
    if(events.length>0) {
      html+=Utilities.formatString('<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th>',"EVENT/SHOW","VENUE/LOCATION","DELIVERY NOTES","DATE","TIME");
    }
    events.forEach(function(ev){
      var sd=Utilities.formatDate(new Date(ev.getStartTime()),Session.getScriptTimeZone(),"E MM dd, yyyy");
      var st=Utilities.formatDate(new Date(ev.getStartTime()),Session.getScriptTimeZone(),"hh:mma");
      html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',ev.getTitle(),ev.getLocation(),ev.getDescription(),sd,st);
    });
    html+='</table>';
  });
  if(html) {
    var userInterface=HtmlService.createHtmlOutput(html).setWidth(1000);
    SpreadsheetApp.getUi().showModelessDialog(userInterface, "My Event Data");
  }else{
    SpreadsheetApp.getUi().alert('No Events Found');
  }
}

Он загружает все данные о событиях для каждого отдельного календаря в отдельную небольшую HTML-таблицу и отображает их все в немодальном диалоговом окне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...