Google apps script 错误:从Google电子表格更新日历
我创建了一个脚本,可以从谷歌电子表格更新谷歌日历 |A | B | C |--| AS | AT | AU | 在我的代码中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
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);