如何使用数组和匹配长度设置值

时间:2019-07-17 08:02:18

标签: google-apps-script

我从外部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

2 个答案:

答案 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);
}