首页 > 解决方案 > 如何从 Google 表格和应用程序脚本中的撤消历史列表中删除 onEdit 触发器执行的操作

问题描述

在我的一张工作表中,我使用一个简单的脚本来更改每次编辑时某些单元格的边框。

它看起来像这样:

function onEdit(e) {
    ...
    sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).setBorder(null, null, null, null, false, false);
    sheet.getRangeList(rangeList).setBorder(null, null, true, null, false, false, "#BBDEFB", SpreadsheetApp.BorderStyle.SOLID_THICK);
  }
}

一切都很好,但是,在编辑某些内容之后,假设我按 CMD+Z(或 CTRL+Z)撤消我的上一个操作。实际发生的是添加的边框被删除,因为从技术上讲,这是最后一个动作。

对于这种性质的问题,是否有众所周知的解决方案?

编辑:我根据第一个答案创建了一个手动触发功能。但是,Google 表格限制每个用户每个电子表格有一个触发器。所以边界只改变了一次。我还按照它所说的删除了触发器,即使那样它也不起作用。

此外,有没有更好的方法来做到这一点?在每次编辑时将边框设置为 null 基本上使得根本无法添加自定义边框。

标签: google-apps-scriptgoogle-sheets

解决方案


如果我的理解是正确的,这个解决方法怎么样?请将此视为几种解决方法之一。

当从外部修改电子表格时,即使按下 CMD+Z(或 CTRL+Z)的键,也不能取消修改的动作。在这个解决方法中,我使用了这个。

修改后的脚本:

在使用此脚本之前,请先安装sample()as OnEdit 事件触发器的功能。这样,当您编辑单元格时,sample()会自动运行 的功能。您可以在此处查看如何安装触发器。

function sample(e) {
  if (e.source.getActiveSheet().getSheetName() == "Sheet1") {
    var sheet = SpreadsheetApp.openById(e.source.getId()).getSheetByName("Sheet1"); // Modified
    var values = sheet.getRange(3, 3, sheet.getLastRow() - 1, 1).getValues();
    var rangeList = values.reduce(function(ar, e, i) {
      if (i > 0 && (values[i - 1][0] != e[0] && e[0] != "")) {
        ar.push("A" + (i + 2) + ":P" + (i + 2));
      }
      return ar;
    }, [])
    rangeList.push(sheet.getRange(sheet.getLastRow(), 1, 1, sheet.getLastColumn()).getA1Notation());
    sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).setBorder(null, null, null, null, false, false);
    sheet.getRangeList(rangeList).setBorder(null, null, true, null, false, false, "black", SpreadsheetApp.BorderStyle.SOLID_THICK);
  }
}

笔记:

  • 使用此脚本时,请将 的函数重命名onEdit(e)为其他名称,如onEdit_sample(e). 因为onEdit()在脚本中有,都sample()作为 OnEdit 触发器安装并onEdit()运行。请注意这一点。

参考:

如果我误解了你的问题,我很抱歉。

编辑:

根据您的附加要求,我添加了一个示例脚本,用于安装 OnEdit 事件触发器的功能sample()

示例脚本:

var id = SpreadsheetApp.getActiveSpreadsheet().getId();
ScriptApp.newTrigger("sample").forSpreadsheet(id).onEdit().create();

推荐阅读