【问题标题】:Two OnEdit functions not working together [duplicate]两个 OnEdit 函数不能一起工作[重复]
【发布时间】:2014-11-20 01:14:06
【问题描述】:

我在 Google 电子表格中找到了两个 onEdit() 函数脚本。但似乎一次只能使用一个功能。

第一个函数是为所有行着色的脚本,第二个是日期函数,用于根据列编辑在 2 个单元格上添加日期。

这里是脚本。

function colorAll() 
{
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 4;
  var endRow = sheet.getLastRow();
  for (var r = startRow; r <= endRow; r++) {
    colorRow(r);
  }
}
SpreadsheetApp.flush();
function colorRow(r)
{
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange(r, 1, 1, 32);
  var data = dataRange.getValues();
  var row = data[0];
  SpreadsheetApp.flush();
  if(row[14] === ""){
    dataRange.setBackgroundRGB(255, 255, 255);
    dataRange.setFontColor("#000000");
  }
  else if(row[14] === "BEING USED") {
    dataRange.setBackgroundRGB(150, 185, 255);
    dataRange.setFontColor("#004BE1");
  }
}
function onEdit(event)
{
  var r = event.source.getActiveRange().getRowIndex();
  if (r >= 2) {
    colorRow(r);
  }
}

function onOpen(){
  colorAll();

还有第二个功能。

function onEdit(e) {
  var aCell = e.source.getActiveCell(), col = aCell.getColumn(); 
  if(col == 19 || col == 21) {
    var adjacentCell = aCell.offset(0, 1);  
    var newDate = Utilities.formatDate(new Date(), 
      "GMT+1", "dd/MM/yyyy");
    adjacentCell.setValue(newDate);
  }
}

日期函数正在工作,但 colorRow 函数不工作,如果我删除日期脚本,那么 colorRow 将工作。

谁能指出我正确的方向?好像我错过了什么

谢谢

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    巴里史密斯关于“两个同名的函数”的评论是正确的;在这种情况下,只有第二个会执行。

    您只能拥有一个名为onEdit() 的包含电子表格的函数。如果您想将另一个函数用作onEdit 触发器,则需要将其设置为可安装触发器。

    您可以使用来自Resources -&gt; Current Project's Triggers 的对话框来安装第二个触发器。

    或者,您可以只有一个 onEdit() 简单触发器,但让它调用“子触发器”函数,将事件对象 e 传递给每个触发器。

    背景:Guide to Triggers.

    【讨论】:

    • 哇!感谢 Mogsdad,它起作用了,我不知道在重命名 onedit 后添加额外的触发器。谢谢大家:)
    【解决方案2】:

    我可能会误解,但看起来你有两个不同的函数,名称完全相同。这不可能发生,因为第二个基本上覆盖了第一个。给出不同的名称,它应该可以工作。

    【讨论】:

    • 你好,我也试过不同的名字,没有变化。
    【解决方案3】:

    为此找到了一个非常简单的解决方案,只需将以下内容添加到脚本的开头:

    function onEdit(e){
      onEdit1(e);
      onEdit2(e)
    }

    我相应地重命名我的 onEdit,例如而不是 onEdit1(e) 我将使用 hideRow(e) 或任何相关的东西。

    这是使用三个 onEdit 函数的完整代码(自动为已编辑的单元格添加时间,使用复选框时自动隐藏一行以及自动插入一行):

    function onEdit(e) {
      autoTime(e);
      hideRow(e)
    }
    
    function autoTime(e) {
      var s = SpreadsheetApp.getActiveSheet();
      if (s.getName() == "Sheet1") {
        var r = s.getActiveCell();
        if (r.getColumn() == 2) {
          var nextCell = r.offset(0, 1);
          if (nextCell.getValue() === '')
            nextCell.setValue(new Date());
        }
      }
    }
    
    function hideRow(e) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
      if (e.range.columnStart != 17 || e.value != "TRUE") return;
      SpreadsheetApp.getActiveSheet().hideRows(e.range.rowStart);
    }
    
    function insertRow(e) {
      var sheet = e.range.getSheet();
      var lastRow = sheet.getLastRow();
      if (e.range.getRow() > lastRow - 5)
        sheet.insertRowAfter(lastRow - 1);
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      相关资源
      最近更新 更多