如何在单元格值增加时显示“Browser.msgBox”?

时间:2018-05-03 16:06:32

标签: google-apps-script google-sheets

我正在尝试在Google表格上创建一个脚本,以便在B10单元格的值增加时收到消息提醒。像这样:

 Static oldVal As Variant
 oldVal = Me.Range("B10").Value
 If Me.Range("B10").Value > oldVal Then
Browser.msgBox('hello world');
End If

有办法吗?

1 个答案:

答案 0 :(得分:0)

除了你的语法之外(Apps Script基于JavaScript),是的,你可以使用几种不同的机制来做到这一点。

使用onEdit(e)简单触发器观看工作表。

e对象有一个oldValue和一个value键,您可以直接比较。您还可以使用range参数测试特定的单元格引用。以下针对单元格B10的测试,具体为:

function onEdit(e) {
  if (e.range.getA1Notation() == 'B10' && e.value > e.oldValue) {
    Browser.msgBox("you increased the value")
  }
}

更进一步,您可以在电子表格中指定一张表,以便在脚本运行之前进行测试。

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  if (e.range.getA1Notation() == 'B10' && e.range.getSheet().getName() == 'Página1' && e.value > e.oldValue) {
    Browser.msgBox("you increased the value")
  }
}

如果单元格在指定的工作表或范围内,则不会发生任何事情。

观察公式单元格稍微复杂一点,但它会起作用。 Apps脚本中有两种方法。 getValue()会返回单元格中显示的,即使它是由公式计算的。 .getFormula() 获取单元格的计算公式。所以,是的,只需在范围内调用.getValue()即可。

主要区别在于您必须观看公式单元格,因为它不是由用户直接编辑的。换句话说,如果通过公式计算单元格值,则不会触发事件对象。包括它很容易:

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var formulaRange = e.range.getSheet().getRange("B4");

  if (e.range.getA1Notation() == 'B10' || formulaRange && (e.range.getSheet().getName() == 'Página1' && e.value > e.oldValue) {
    Browser.msgBox("you increased the value")
  }
}

有关文档中Apps Script event objects的更多信息。