Google表格脚本:forEach和setValue(或setValues)

时间:2018-02-12 19:52:58

标签: google-apps-script google-sheets

我正在使用forEach迭代一系列玩家名称并添加字符串'plays soccer'。这个名字。当我使用Logger.log时,一切都按预期显示。每个球员的名字都被列为“鲍勃踢足球”。或者'约翰踢足球'。

但是,当我尝试将其放入工作表时,我只获得数组中的姓氏。

如何让列表中的每个名称显示在表格中,特别是使用forEach?

我知道有一些方法可以使用标准for循环,但我觉得我更好地理解这种语法,而使用for循环我真的不明白它是如何工作的。即使试图从其他人所做的事情中复制它对我来说也没有多大意义。我敢肯定我错过了一些愚蠢而简单的东西,但我无法弄明白。

注意:即使我将“numRows”更改为4,它也会重复“Tim扮演足球”。四次。我希望每个名字都出现一次。

function forEachTest (){

var players = ['Bob', 'John', 'Mark', 'Tim'];

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();

var startRow = 1
var startColumn = 1
var numRows = 1
var numColumns = 1

var dataRange = sheet.getRange(startRow, startColumn, numRows, numColumns);

players.forEach(function(eachPlayer) {
Logger.log(eachPlayer + ' plays soccer.');
Logger.log(eachPlayer);

dataRange.setValue(eachPlayer + ' plays soccer.');

});

2 个答案:

答案 0 :(得分:0)

您需要单独设置范围,现在它在第一个单元格上逐个写入正确的名称,如果更改numRow,则将其写入所有单元格

类似的东西:

var i = 1;
players.forEach(function(eachPlayer) {
    Logger.log(eachPlayer + ' plays soccer.');
    Logger.log(eachPlayer);

    dataRange = sheet.getRange(startRow + i, startColumn);
    dataRange.setValue(eachPlayer + ' plays soccer.');
    i++; //to get the next row
});

如果你真的不想i,你甚至可以使用sheet.addRow为每个玩家创建一个新的空行。

答案 1 :(得分:0)

您将整个dataRange的值设置为相同的值四次。您需要迭代设置每个玩家的值,如下所示:

function forEachTest (){

var players = ['Bob', 'John', 'Mark', 'Tim'];

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();

var currentRow = 1;
var startColumn = 1;

players.forEach(function(eachPlayer) {
Logger.log(eachPlayer + ' plays soccer.');
Logger.log(eachPlayer);

sheet.getRange(currentRow, startColumn).setValue(eachPlayer + ' plays soccer.');
currentRow++;
});