繁体   English   中英

让谷歌表格脚本重复多个数据然后清除单元格的问题

[英]Issues getting google sheets script to repeat for multiple data and then clear cells

这是我在下面提到的示例表

我的工作表旨在跟踪人们在比赛中的技能水平变化。 我的表格“团队选择器”允许您指定每个团队的成员并输入分数,它会在 P 列中更新技能等级 (ELO)。

我已经设置了一个按钮,该按钮目前可以为 G4 的玩家提交我想要的所有数据。 我无法弄清楚如何重复此操作以提交任何其他选定玩家的数据。 由于团队中并不总是有 6 人,因此理想情况下,我还希望脚本能够识别是否没有输入数据,这样它就不会复制空白值。

然后我想清除 G4:G9、G15:G20 和 M11:M12 之间的值,并将单元格 M2 的值增加 1。最简单的方法是什么?

方法

在这种情况下,我建议创建配置变量来存储对单元格的引用。 这样,基于电子表格结构扩展或修改脚本行为会更容易。 使用 Javascript object 非常容易为每个团队创建配置变量。

var team1 = {start: 4, end: 9, player: "G", oldElo: "H", newElo: "P", result: "N11"};
var team2 = {start: 15, end: 20, player: "G", oldElo: "H", newElo: "P", result: "N12"};

这样,您在构建导出逻辑时就不必担心单元格引用。

现在您应该继续导出所需的信息。 由于团队的结构几乎相同,我建议构建另一个 function ,它将返回一个包含提取信息的数组:

function fillTeamRows(ss, team) {
    // These are general configuration variables that are the same for every team.
    var match = "M2";
    var date = "M5";
    var scoreboard1 = "M11";
    var scoreboard2 = "M12";

    // Here i declare an empty array that I will fill according to the export logic
    var teamRows = [];
    var i;
    for (i=team.start; i<= team.end; i++) { // I will loop through the team range to build my export
      if (!ss.getRange(`${team.player}${i}`).getValue() == "") { // If there is no player in this row, skip it.
        var playerRow = [];
        playerRow.push(ss.getRange(match).getValue());
        playerRow.push(ss.getRange(`${team.player}${i}`).getValue());
        playerRow.push(ss.getRange(date).getValue());
        playerRow.push(ss.getRange(team.result).getValue());
        playerRow.push(ss.getRange(`${team.oldElo}${i}`).getValue());
        playerRow.push(ss.getRange(`${team.newElo}${i}`).getValue());
        playerRow.push(ss.getRange(scoreboard1).getValue());
        playerRow.push(ss.getRange(scoreboard2).getValue());
        teamRows.push(playerRow); // Add the player row to the team array.
        // Now you can clear the information about the player
        ss.getRange(`${team.player}${i}`).clear();
      }
    }
   return teamRows;
}

现在我将使用这个 function 为两个团队构建导出并将数据导出到

  let team1Rows = fillTeamRows(formSS, team1);
  let team2Rows = fillTeamRows(formSS, team2);

  // Now it's a good moment to clear the scoreboard and increment the match counter.
  formSS.getRange("M11:M12").clear(); //clear
  
  formSS.getRange("M2").setValue(1 +formSS.getRange("M2").getValue()); //increment
  
  //Input Values
  var values = [...team1Rows,...team2Rows];
  
  datasheet.getRange(datasheet.getLastRow()+1, 1, values.length, 8).setValues(values);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM