【问题标题】:Google Sheets App Script: Can you write an array to a single row instead of a single column?Google Sheets App Script:您可以将数组写入单行而不是单列吗?
【发布时间】:2019-09-23 00:45:24
【问题描述】:

.setValues() 方法将采用数组[[0],[1],[2],[3]] 并将其写入.getRange(),该数组必须位于单列中的多行中:A1、A2、A3、A4。

相反,我想写入相同的数组,但将其写入单行:A1、B1、C1、D1。这是可能的还是我必须重新排列我的数组以始终写入单列?

编辑:对不起,我想我不清楚。我基本上是在寻找一种方法或类似于使用数组的 appendRow 方法的东西。该数组可以是 1D 或 2D(我可以轻松地编写一个循环来创建任何一个)。 appendRow 对我不起作用的原因是因为此方法会将数组放在数据的底部。我想将数据行放在我可以指定的范围内。

例如,使用上面的数组,我想用 getRange(1,3,10,10) 中已经存在的数据将该数组写入 getRange(1,4,1,4)。

【问题讨论】:

标签: javascript google-apps-script google-sheets google-apps-script-editor


【解决方案1】:

试试这个

function getData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  //  var dataArray = ss.getRange(1, 1, ss.getLastRow(), 1).getValues();
  var dataArray = [[0],[1],[2],[3]]
  var dataUnit;
  var data = [];
  for (var i = 0; i < dataArray.length; i++) {
    dataUnit = dataArray[i].toString();
    data.push(dataUnit);
  }
  ss.appendRow(data);
}

【讨论】:

  • 如果我没看错,您将二维数组转换为一维数组以便能够使用 appendRow 方法。有没有办法指定写入数据行的范围,而不是附加到当前数据的底部?据我所知,appendRow 只能在底部放一行。
  • 哦,当然。您始终可以使用getRange()(我在var dataArray = [[0],[1],[2],[3]] 上方的代码中使用的方式)并使用setValues() :)
  • 啊,你是对的!我试图 setValues([[1], [2], [3]]) 或 setValues([1, 2, 3]).. 我没想过 setValues([[1, 2, 3] ]) 可以写入一行。谢谢!初学者虚拟时刻
【解决方案2】:

另一种方法是

var dataArray = [[0],[1],[2],[3]].reduce(function (a, b) {
    return a.concat(b);
});

Logger.log(dataArray); // [0, 1, 2, 3]

或者,如果你需要一个二维数组(.setValues() 需要)

var dataArray = [[[0],[1],[2],[3]].reduce(function (a, b) {
    return a.concat(b);
})];
Logger.log(dataArray); // [[0, 1, 2, 3]] --> 2D array representing a single row.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    相关资源
    最近更新 更多