【问题标题】:onEdit script not firing on Google Sheet in formula based cellsonEdit 脚本未在基于公式的单元格中的 Google Sheet 上触发
【发布时间】:2017-10-04 09:56:01
【问题描述】:

我对 Google 脚本编写完全陌生,但我使用了各种帖子来拼凑我需要的东西:当我的 Google 表格中的每个工作表中的每个单元格不为空时,它会为每个单元格添加灰色边框,而当单元格为空。

function onEdit(range) {
  var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getDataRange();
  range.setBorder(true, true, true, true, true, true, "white", SpreadsheetApp.BorderStyle.SOLID);
    var values = range.getValues();
    for (var i = 0; i < values.length; i++) {
        for (var j = 0; j < values[i].length; j++) {
            if (values[i][j] !== "") {
                range.getCell(i + 1, j + 1).setBorder(true, true, true, true, true, true, "#dfdfdf", SpreadsheetApp.BorderStyle.SOLID)
            }
        }
    }
}

当我手动更改任何单元格中的数据时,这非常有效;但是,在脚本正在监视的那些单元格上,从另一个工作表中提取数据无法触发触发器/脚本。我怎样才能解决这个问题,以便带有公式(引用其他工作表)的单元格仍然会触发我的脚本?

非常感谢任何帮助。谢谢!

【问题讨论】:

  • 这是正常行为。简单触发器仅响应用户操作。你可以阅读它here。此外,您可以在触发器中传递的唯一参数是事件对象。您的函数正在工作,因为您将范围重新定义为数据范围。
  • 假设如果我定义了一个自定义范围,比如 A1:C100,并且想要在值根据公式发生变化时应用这种触发器,那么在这种情况下可以做什么?
  • 如果我理解正确,您更改了另一张表格上的信息,该表格正在您希望更改边框的表格中的公式中使用?
  • 没错。现在你找到我了。

标签: google-apps-script google-sheets


【解决方案1】:

基于 cmets 中的信息。

var range 中,将.getActiveSheet() 更改为.getSheetByName('Sheet1'),其中 sheet1 是您希望设置边框的工作表。

目前,当您编辑工作表时,.getActiveSheet() 正在获取您进行编辑的工作表,而不是您想要的是当您编辑电子表格中的任何工作表时,您希望此脚本仅适用于特定工作表,因此.getSheetByName('Sheet1')

编辑

如果通过公式进行编辑或更改,则触发器不会触发。见here

【讨论】:

  • 问题是有时值会在不编辑任何工作表的情况下发生变化。例如,sheet1 A1 中的值正在根据 sheet2 A1 的值进行更新,并且具有日期公式。现在,如果 sheet2 A1 中的日期发生更改,则 sheet1 A1 中的值会更新,我试图根据标准中定义的值应用边框。所以在这里,没有任何工作表正在被编辑,而是正在自动更新,我想触发我的触发器应该在 sheet1 中的这个值更新时触发。
  • 更正,如果更新是由公式引起的,则触发器不会触发。
  • 那我还在原处。我想在公式所做的更改上触发我的触发器。
  • 是的,回到第一方。网上有一些解决方法,但似乎不太可靠!基于时间的触发器是否可以与 onEdit 触发器一起工作,以便至少触发器会在设定的时间间隔和编辑事件中触发?
  • 我也尝试过基于时间的触发器,但似乎不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多