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

Google apps script 错误:从Google电子表格更新日历,google-apps-script,Google Apps Script,我创建了一个脚本,可以从谷歌电子表格更新谷歌日历 |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 calI

我创建了一个脚本,可以从谷歌电子表格更新谷歌日历

|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

我增加了列数,但仍然得到了这个错误

而不是range.setValuesdata;你应该试试

sheet.getRange(1,1,data.length,data[0].length).setValues(data);
因此,至少当数据是同质的,并且每行中的列数相同时,您可以确保范围具有正确的大小

编辑 下面是一个脚本,用于规范化输出数组,以便将其用作setValues中的值

在本例中,我推送值“Z”,以便在logger for demo中更容易看到它,但当然,您应该将“Z”替换为,以便它只添加空单元格

我加入了一个测试函数和下面的记录器结果

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;
}

在for循环中,j的限制是什么?它与i相同,而不是使用i-3 me。使用分配的jIt意味着您的数组不是每一行都有相同的长度……正如我上面所说,这是一个强制性条件。您能帮助从具有可变长度行的电子表格中读写吗?对不起,我在度假几天,只带着手机,没有电脑。。。因此,我有点晚了,但请参阅使用新代码编辑以解决您的问题。
var newData = arrayNormalize(data);
sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData);