无法使用setValue()将数组粘贴到范围内

时间:2019-06-22 04:35:25

标签: google-apps-script

我将函数映射到一个数组,该数组应该在我Yes数组时给我NoLogger.log(costsfinalised),具体取决于输入:

[No, No, No, No, Yes, No, No, Yes, Yes, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No]

但是当我尝试用setValues(costsfinalised)粘贴它时,出现一条错误消息“无法将数组转换为对象”,而当我执行setValue(costsfinalised)时,它确实可以工作,但仅适用于{{1} } s(实际上不是日志中的内容。为什么?如何将该数组粘贴到范围中?

No

1 个答案:

答案 0 :(得分:3)

问题

您正在尝试将非法参数传递给方法,setValues()仅接受二维Array实例。您应将二维Array视为单元格映射,其中元素表示,而它们的元素

//pseudo-code;
[
 row 1 : [col1, col2],
 row 2 : [col1, col2]
]

解决方案

您可以修改代码以为您生成此Array(从代码中判断,您想填充一列,对吗?不管怎样,如果您添加第二个循环来生成列值,您将能够用自定义的行数和列数填充Range

var col = destinationsheet.getRange(2,7,costsfinalised.length,1);

var temp = [];

for(var i=0; i<costsfinalised.length; i++) {
  var row = [ costsfinalised[i] ];
  temp.push(row);
}

col.setValues(temp);

替代

或者,您可以在map上使用Array方法(在您的情况下,您可以直接引用cost而不是costsfinalised[i]-只是不要忘记也将其包装-return [ cost ]):

var col = destinationsheet.getRange(1,1,costsfinalised.length,1);

var output = costsfinalised.map(function (cost,i) { return [ costsfinalised[i] ]; } );

col.setValues(output);

有用的链接

  1. setValues()方法reference;
  2. Array内置reference在MDN上;
  3. MDN上的
  4. map()方法reference