在Apps Script中将1D数组写入工作表列

7
我试图使用Apps Script将一个长的1D数组写入工作表中的一列,但无法使其正常工作。尝试使用setValues(),但它需要一个2D数组。
function writeArrayToColumn() {
var mainSheet = SpreadsheetApp.getActiveSheet()
var array = ["M", "C", "D", "F", "R", "S", "Q", "V", "G"]
var range = mainSheet.getRange(2, 1, array.length, 1)
range.setValue(array)
}

这段代码只在前9个单元格中写入"M",而不是在第1个单元格中写入"M",在第2个单元格中写入"C",依此类推。 如果我使用setValues()函数,会出现错误:

Cannot convert Array to Object[][].

在Stack Overflow上有类似的问题,但没有一个能够回答这个问题。

3个回答

4
除了 Sandy 的解释之外,添加一个 map() 函数也应该可以解决问题。
function writeArrayToColumn() {
var mainSheet = SpreadsheetApp.getActiveSheet()
var array = ["M", "C", "D", "F", "R", "S", "Q", "V", "G"]
    .map(function (el) {
        return [el];
    });
var range = mainSheet.getRange(2, 1, array.length, 1)
range.setValues(array)
}

1
我认为您想要向每一行写入新的值。所以这是您需要的代码:
function writeArrayToColumn() {
  var mainSheet = SpreadsheetApp.getActiveSheet();
  var array = ["M", "C", "D", "F", "R", "S", "Q", "V", "G"];
  var outerArray = [],
      tempArray = [],
      i=0;

  for (i=0;i<array.length;i+=1) {
    tempArray = [];
    tempArray.push(array[i]);
    outerArray.push(tempArray);
  };

  var range = mainSheet.getRange(2, 1, array.length, 1);

  range.setValues(outerArray);
};

如果您想将数组写入一行中,其中每个数组元素都将进入新单元格,请创建一个外部数组,并将内部数组推入外部数组:
function writeArrayToColumn() {
  var mainSheet = SpreadsheetApp.getActiveSheet();
  var array = ["M", "C", "D", "F", "R", "S", "Q", "V", "G"];
  var range = mainSheet.getRange(2, 1, array.length, 1);
  var outerArray = [];
  outerArray.push(array);

  range.setValues(outerArray);
};

如果您想将每个数组元素放入新行,那就需要不同的方法。您需要遍历数组,并为每个元素创建一个新数组。

0
作为替代方案,在创建数组时,请确保使用“[]”将要插入数组的值或变量括起来,像这样:

array.push(["M"];
range.setValues(array);

这将创建一个二维数组,可以使用setValues正确插入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接