首页 > 解决方案 > 如何在一个 Google Sheets 工作簿中的多个选项卡上执行相同的功能?

问题描述

我正在尝试在同一工作簿中的 30 个选项卡上执行一个简单的复制粘贴脚本。

工作簿布局 - 30 支 NBA 球队中的每支球队都有一个标签 - 每个标签都被命名为不同的球队 - 以及其他三个摘要标签(总共 33 个)。每个团队特定选项卡的格式都是相同的。单元格中的值对于团队选项卡是唯一的,但列 G,例如,是 30 个团队选项卡中的每个选项卡中的“主队”。

目标 - 我正在尝试复制 D 列并将其粘贴到工作簿中每个团队选项卡的 F 列中。我的想法是我会为每个选项卡编写脚本,然后在工作簿中将它们串在一起。以下是我对小牛队的看法:

function primeMavericks() {
 var ss=SpreadsheetApp.getActive();
 var sh=ss.getSheetByName('Mavericks');
 var rg=sh.getRange('D3:D33');
 var vA=rg.getValues();
 var tsh=ss.getRange('F3:F33');
 tsh.setValues(vA);
}

问题 - 这对一个团队来说很好,但是第二个我开始为其他团队输入函数时,脚本开始将 D 列中的数据粘贴到不同团队的选项卡中。例如,下面将湖人队的 D 列粘贴到快船队的 F 列。如果我在其他 28 支队伍中串连,那将变得绝对混乱。

function primeLakers() {
 var ss=SpreadsheetApp.getActive();
 var sh=ss.getSheetByName('Lakers');
 var rg=sh.getRange('D3:D33');
 var vA=rg.getValues();
 var tsh=ss.getRange('F3:F33');
 tsh.setValues(vA);
 primeClippers();
}

function primeClippers(){
 var ss=SpreadsheetApp.getActive();
 var sh=ss.getSheetByName('Clippers');
 var rg=sh.getRange('D3:D33');
 var vA=rg.getValues();
 var tsh=ss.getRange('F3:F33');
 tsh.setValues(vA);
}

我认为这可能是因为我的变量具有相同的名称(尽管嵌套在不同的函数中)。作为尝试的修复,我返回并让每个变量名都是唯一的,但仍然遇到了相同的复制/粘贴问题。

我不知道在这里做什么......有没有更好的方法来运行这个脚本来获得预期的结果?

标签: google-apps-scriptgoogle-sheets

解决方案


只需使用 for 循环来遍历工作表。如果要排除特定选项卡,可以使用条件来完成。像这样的东西应该有效:

function NBA (){
  var ss = SpreadsheetApp.getActive();
  var sheets = ss.getSheets();

  for (var i=0; i < sheets.length; i++){

    if (sheets[i].getName() == "sheetToExclude"){
      continue;
    }
    var rg = sheets[i].getRange('D3:D33');
    var vA = rg.getValues();
    var tsh = sheets[i].getRange('F3:F33');
    tsh.setValues(vA);
  }
}

对于 - JavaScript


推荐阅读