将带有对象的数组传递给GAS中的另一个函数

时间:2013-07-23 20:02:23

标签: arrays callback google-apps-script google-form

为了给你一些关于我问题的背景知识: 我正在使用UI服务在Google App Script中创建表单,并且我将特定的日历事件存储在dataArray中。因此事件对象存储在数组中。我想将此数组传递给提交函数,但无法弄清楚如何解决这个问题,因为:

  1. 我无法将其添加为回调元素(因为它不是小部件)
  2. 我无法将事件对象存储在窗口小部件(即列表框等)中,然后将该窗口小部件添加为回调元素。
  3. 以下是我想要做的简要示例:

    var cal= CalendarApp.getDefaultCalendar();
    var event= cal.getEvents(new Date("June 16, 2013 PST"),
                                   new Date("July 22, 2013 PST"));
    var specific = new Array;
    for( var j=0; j<event.length;j++){
    specific.push(event[j]);
    //This stores the events in the specific variable
    //I want to send this variable (w/ the data) to another function on submit
    

    我很感激您可以借给我的任何建议。

    谢谢!

1 个答案:

答案 0 :(得分:0)

作为我在评论中给出的答案的补充:“您也可以简单地存储id,当您使用相同的开始/结束时间再次阅读事件时,您可以检查事件是否与保存相对应循环中的ID ...如果找到具有正确ID的匹配,您确定它是正确的事件“

这是我用来修改/更新/删除日历事件的代码,使用他们的ID作为参考。此代码用于删除从电子表格中选择的特定事件,修改事件的代码大致相同,至少它使用相同的ID检查。

  ...
  var cal = CalendarApp.openByName(calName);
  if (cal) {
    var events = cal.getEvents(new Date(date_deb), new Date(date_fin),{max: 4000}); // stocke tt ds une variable array
    var sel= sh.getRange(6,1,sh.getLastRow()-5, 10).getValues();// read data in the SS
    for(e=0;e<events.length;++e){
      var delFlag = false;
      var ID = events[e].getId(); 
      for(n=0;n<sel.length;++n){ 
        if ((sel[n][8] == "x"||sel[n][8] == "X")&&sel[n][9]==ID){ // the ID here is stored in the spreadsheet in column J and I use a 'X' marker to select which event should be deleted
          delFlag = true;
          sh.getRange(n+6,9,1,2).setBackgroundColor('#ff5500');
          SpreadsheetApp.flush();
          Logger.log('FLAG '+ e);
          break;
        }
      }
        if(delFlag){
          try{
          var toDelete = events[e].deleteEvent(); 
          ++todel; 
          delFlag = false;
          Logger.log('event deleted : '+sel[n][1]);
          }catch(Err){Logger.log('Event from a serie already deleted from another occurence')}
      }
    }
  }
  var msg = todel + " événement(s) effacé(s) dans l'Agenda '"+calName+"'";
  ss.toast("Effacement terminé", msg, 3);
  ...