错误:从Google电子表格更新日历

时间:2014-08-07 11:12:45

标签: google-apps-script

我创建了一个可以从Google Spreadsheet更新Google日历的脚本。我的电子表格就像

  

| A | B | C | ------ | AS | AT | AU |

在我的代码中

 function getRows(){
  var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  var sheet = SpreadsheetApp.getActiveSheet();
  var date = new Date(data[44][1]);
  var calId = "**************@group.calendar.google.com";
  var cal = CalendarApp.getCalendarById(calId);
  var range = sheet.getDataRange();
  for (j=0,i=3;i<15;i++,j++) {

    var title=data[44][i];
    var tstart = new Date(data[9][i]);
    tstart.setDate(date.getDate());
    tstart.setMonth(date.getMonth());
    tstart.setYear(date.getYear());
    var tstop = new Date(data[9][i+1]);
    tstop.setDate(date.getDate());
    tstop.setMonth(date.getMonth());
    tstop.setYear(date.getYear());
    var desc="adkd";
    var loc="akskd";



    var id = data[44][26+j];  
    try {
      var event = cal.getEventSeriesById(id);
    }
    catch (e) {

    }
    if (!event) {

      var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc}).getId();

      data[44][26+j] = newEvent;  
    }
    else {
      event.setTitle(title);
      event.setDescription(desc);
      event.setLocation(loc);

      var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
      event.setRecurrence(recurrence, tstart, tstop);
    }
    debugger;
    range.setValues(data);
  }

  }

在此我收到错误

  

不正确的范围宽度为27但应为24

我增加了列数。但我仍然收到此错误。

1 个答案:

答案 0 :(得分:0)

而不是range.setValues(data);你应该尝试

sheet.getRange(1,1,data.length,data[0].length).setValues(data);

因此您可以确保range的大小合适(至少data是同质的(每行中的列数相同)


修改

这是一个“规范化输出数组的脚本,以便它可以在setValues()中用作值。

在此示例中,我推送值'Z'以便在记录器中更容易地看到它(用于演示),但当然您应该将'Z'替换为'',以便它只添加空细胞

我加入了测试函数和下面的Logger结果。

function test(){
  var array = [['xx','xx'],['xx','xx','xx'],['xx','xx','xx','xx','xx'],['xx','xx','xx','xx','xx','xx','xx']];
Logger.log('array '+JSON.stringify(array)+'\n becomes '+JSON.stringify(arrayNormalize(array)));
}

function arrayNormalize(array) {
  var lenMax = 0;
  for(var n in array){
    if(array[n].length>lenMax){lenMax = array[n].length };
  }
  Logger.log('max array width = '+lenMax);
  for(var n in array){
    while(array[n].length<lenMax){
      array[n].push('Z');
    };
  }
  return array;
}

enter image description here

在您的代码中使用以下函数:

var newData = arrayNormalize(data);
sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData);