如何从 google 电子表格中的单个主跟踪器自动填充多个工作表

How to auto populate multiple sheets from a single master tracker in google spreadsheet

我在创建可以从单个主跟踪器传播sheet 填充多个 sheet 的脚本时遇到问题。更具体地说,主跟踪器 spreadsheet 有一个名为 outcome 的列,其中记录了客户的结果。我希望能够简单地在主跟踪器中输入结果,并让该值的输入触发在单独的 sheet 中创建一个新行,该行仅包含有关该单个结果的信息。

例如,在主 sheet 中,我会在结果列中输入“添加到候补名单”,从而在另一个 sheet 中生成该记录的副本,其中包含名为"Clients added to waitlist"。我希望能够为大约 5 个不同的结果做到这一点。

目前,我一直在为我的 5 个结果和 5 个选项卡中的每一个使用以下脚本来完成此任务,但我还没有成功:

function onEdit(event) {
  // assumes source data in sheet named Needed
  // target sheet of move to named Acquired
  // test column with yes/no is col 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Main Tracker" && r.getColumn() == 8 && r.getValue() == "Added to Waitlist") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Clients Added to Waitlist");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target);
  }
}

每当我有多个上述脚本条目时,只有第一个输入编辑器的条目有效,而其余的根本不接受。如果有人能帮我解决这个问题那就太好了。

您不能在脚本中使用多个 onEdit 函数。函数名称必须是唯一的。不过,函数中可以有多个条件语句。

if (event.value == "Added to Waitlist") {
    // do something 
} 
if (event.value == "Another thing") {
    // do something else
} 

或者更好的是,使用 a switch statement:

switch (event.value) {
  case "Added to Waitlist":
    // do something
    break
  case "Another thing":
    // do something else
    break

请注意,event.value 为您提供编辑时输入的值;您无需在活动单元格上调用 getValue 即可获取它。

同样,r = event.source.getActiveRange(); 可以简单地 r = event.range;