我创建了一个可以从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
我增加了列数。但我仍然收到此错误。
答案 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;
}
在您的代码中使用以下函数:
var newData = arrayNormalize(data);
sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData);