我从外部API获取数据列表,当我在执行setValues()时会出现错误:
数据中的行数与范围中的行数不匹配。数据为1,但范围为365。(第59行,文件“ Extra_queries”)
我尝试删除设置值上的列长并更改顺序。
我认为数组的构建不正确。我认为此数组是为列而不是行设置的? 预期范围在第3行第16列,直到数据结束。
function getComments(doc){
var basicMetadata = getDeliveryBasicMetadata()
var ordersId = doc.getRange("C3:C").getValues();
var last_row = ordersId.filter(String).length;
var range = doc.getRange(3,16,last_row,1);
var comments = [];
for (var i = 3; i <= last_row; ++i){
var orderIndex = i-3
var comment = lookForComments(ordersId[orderIndex],basicMetadata);
comments.push(comment);
}
var setValuesLenght = last_row - 2 //as we start on row 3 to align Last_row with lenght of the comments Array. Now both 365
doc.getRange(3,16,setValuesLenght,1).setValues([comments]);
}
在这里您可以看到使用commnets构建的数组。(很多“”,因为这是一个测试) enter image description here
答案 0 :(得分:2)
您的数组是一维的,而不是您期望的二维的。既然是这种情况,它将永远只有1行长。
doc.getRange(3,16,1,comments.length).setValues([comments]);
答案 1 :(得分:0)
我发现解决方案正在执行循环,具体说明如下:1D Array to fill a spreadsheet column
谢谢您的帮助!
请参见工作代码:
function getComments(doc){
var basicMetadata = getDeliveryBasicMetadata()
var ordersId = doc.getRange("C3:C").getValues();
var last_row = ordersId.filter(String).length;
var comments =[]
for each (order in ordersId){
comments.push(lookForComments(order,basicMetadata));
}
writeArrayToColumn(comments, doc)
}
function writeArrayToColumn(array, mainSheet) {
var newArray = array.map(function (el) {
return [el];
});
mainSheet.getRange(3,16,newArray.length,1).setValues(newArray);
}