Как отправить массив в диапазон Google Sheet? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь перенести массив на лист Google, но код не работает. (В режиме отладки я вижу, что мой массив есть, но «setValues» не отображает никаких данных на моем листе.)

Вот мой код:

var cal_start = stp.getRange("B2").getValue(); // start date
var cal_end = stp.getRange("B3").getValue();  // end date
var events = cal.getEvents(new Date(cal_start), new Date(cal_end));

// Cooper on StackOverflow provided this deduplication code... I have no idea how it works
var mylist=[];
var obj={eA:[]};
for(var i=0;i<events.length;i++) {
  var key=events[i].getTitle() + events[i].getDescription();
  if(!obj.hasOwnProperty(key)) {
    obj[key]={title:events[i].getTitle(),description:events[i].getDescription(),guests:events[i].getGuestList().length, start:events[i].getStartTime(),id:events[i].getId(),copies:0};
    obj.eA.push(key);
  }else{
    obj[key].copies+=1; //count the copies
  }
}
for(var i=0;i<obj.eA.length;i++) {
  mylist.push(obj[obj.eA[i]]);
}

// Create a header row, and display the mylist array on a sheet called "all_meetings" (mtg)
mtg.clearContents(); 
var header = [["Event Title", "Event Description", "Guests", "Event Start", "ID", "Copies"]]
var range = mtg.getRange(1,1,1,6);
range.setValues(header);

// The header above appears on the sheet, but my array isn't showing up. There are no errors
var range2 = mtg.getRange(2,1,1,6);
range2.setValues([mylist]);

ПРИМЕЧАНИЕ. данные в моем массиве выглядят так:

+0
+1
-2
     title "Title text"
     description "Description text"
     guests (number)
     start (date/time)
     id (number)
     copies (number)
+3
+4

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Если я правильно понимаю, mylist - это массив объектов, каждый из которых соответствует событию календаря, и вы хотите установить значения каждого события в каждой строке на листе.

Если это так, вам придется перебирать каждое событие в mylist, и для каждого события извлекать каждое из значений свойств и записывать их в соответствующую строку листа в правильном порядке. Чтобы добиться этого, вы можете заменить это:

// The header above appears on the sheet, but my array isn't showing up. There are no errors
var range2 = mtg.getRange(2,1,1,6);
range2.setValues([mylist]);

Для этого:

for (var j = 0; j < mylist.length; j++) { // Iterate through all events in mylist
  // Retrieve event property values, in order:
  var title = mylist[j].title;
  var description = mylist[j].description;
  var guests = mylist[j].guest;
  var start = mylist[j].start;
  var id = mylist[j].id;
  var copies = mylist[j].copies;
  var values = [title, description, guests, start, id, copies];
  mtg.getRange(j + 2, 1, 1, 6).setValues([values]); // Writes property values to the sheet row
}

Я надеюсь, что это поможет.

0 голосов
/ 28 января 2020

Наиболее вероятная проблема - несоответствие между длиной mylist и шириной range2.

. Вы можете попробовать определить range2 как:

var range2 = mtg.getRange(2,1,1, mylist.length);

Если это не решает проблему, попробуйте войти mylist, чтобы проверить его размеры и сопоставить его с размерами range2.

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