【问题标题】:Run a script based on sheet names for different sheets depending on another script根据另一个脚本运行基于不同工作表的工作表名称的脚本
【发布时间】:2020-04-09 13:15:00
【问题描述】:

昨天我发布了已修复的第一个问题 (Archive rows from different sheets and remove them to initial position (to initial sheet) when I want to unarchive (google sheets))(再次感谢您阅读我)

我通过以下代码完成了我的脚本(从 当在 Col3 中提到客户时,用 PM 名称自动填充 Col23 或 W)。

function onEdit(event) {
  // assumes source data in sheet named Elisa-Miriam-Victor
  // target sheet of move to named Archive
  // getColumn with check-boxes is currently set to column 2 or B
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  // Archive a project with checked box from Archive Sheet
 if((s.getName() == "Elisa"||s.getName() == "Miriam" )&& r.getColumn() == 2 && r.getValue() == true) { // copy past every time a new PM-sheet is added
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Archive");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  } 
  // Unarchive a project from Archive sheet to respective owner
  else if(s.getName() == "Archive" && r.getColumn() == 2 && r.getValue() == false) {
    var row = r.getRow();
    var nameColumn = 23;
    var name = s.getRange(row, nameColumn).getValue();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName(name);
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);

    // When a client is mentioned in Col3, fill automatically Col23 or W by the PM name    
    {
  var s = SpreadsheetApp.getActiveSheet();
  var data = s.getRange("C9:C").getValues();
  var data_len = data.length;
  for(var i=8; i<data_len; i++) {
  if(data[i][0].length == 0) {
    s.getRange(i+1,23).setValue("");
  } else {
    s.getRange(i+1,23).setValue("Miriam");
  }
  }
}
}
}

因此,从现在开始,如果 Miriam 的工作表上在 Col3 中提到了一个新客户,那么 Col 23 会自动填上她的名字。 但是我需要规范这部分脚本,因为每个新员工都有自己的工作表(他的名字),并且对于每个员工的工作表,每当填写 Col3 时,我需要在工作表名称下自动填写 Col23。

有没有人知道如何为 Elisa 和 Miriam 编写脚本?

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    目标:

    如果在 Col3 中添加了新客户端,则写下 Sheet 的名称

    程序:

    您可以检查 Col23 的最后一行,看看它是否为空并复制 Sheet 的名称。仅当有人手动编辑 Col3 时才会发生更改。

    代码:

    这是一个例子。您必须将其集成到您当前的代码中。

    function onEdit(event){
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var s = event.source.getActiveSheet();
      var r = event.source.getActiveRange();
    
      var lastRow = s.getLastRow();
      var col23 = s.getRange(lastRow, 23).getValue();
    
      if (r.getRow() == lastRow && r.getColumn() == 3 && col23 == ""){
    
        s.getRange(lastRow, 23).setValue(s.getSheetName());
     }
    }
    

    参考资料:

    【讨论】:

    • 您好 Jescanellas,感谢您的帮助。我将您的代码集成到我的脚本中,但没有任何结果;当我填写 Col3 时,所有者工作表的名称不会自动填写在 W 列中...
    • 不错!我很高兴它对你有用:)
    • 真的谢谢你!你知道是否也可以这样做,而不是用工作表名称填充 Col23;我用谷歌表格中的数据验证提供的复选框填充 Col2?我不想使用选中或未选中框的文本;目标是:“如果 C45 已填充,我希望在 B45 中使用复选框进行数据验证”?
    • 在评论中写起来有点复杂,建议您创建一个新帖子。我无法将其添加到我的答案中,因为寻找上述解决方案的其他人可能会感到困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    相关资源
    最近更新 更多