【问题标题】:Google AppsScript: can't get the function to work on all cellsGoogle Apps 脚本:无法使该功能适用​​于所有单元格
【发布时间】:2021-12-20 09:16:26
【问题描述】:

我编写了一个函数,每次您在单元格中输入一个不是数字的值时都会抛出一条消息(toast)。它适用于一个单元格。问题是,我希望它在多个单元格范围内工作,但它只适用于该范围的第一个单元格。这是代码:

function onEdit() {
    var app = SpreadsheetApp;
    var activeSheet = app.getActiveSpreadsheet().getSheetByName("TEST")
    var workingCell = activeSheet.getRange("B13:B27").getValue();

    if (typeof workingCell != "number" && workingCell != "") {
        SpreadsheetApp.getActive().toast("This is not a number, please try again.");
    }
}

如您所见,在 'gerRange()' 部分中,我定义我希望代码在 B13 到 B27 范围内工作,但它仅适用于第一个单元格 (B13)。

谁能告诉我可以做些什么来使它在一个范围内工作?

谢谢。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    我相信你的目标如下。

    • 您想在编辑“TEST”表上“B13:B27”的单元格时运行SpreadsheetApp.getActive().toast("This is not a number, please try again.") 的脚本。

    这样的话,下面修改的脚本怎么样?

    修改脚本:

    function onEdit(e) {
      var { range } = e;
      var workingCell = range.getValue();
      if (
        range.getSheet().getSheetName() == "TEST" &&
        range.columnStart == 2 &&
        range.rowStart >= 13 &&
        range.rowEnd <= 27 &&
        typeof workingCell != "number" &&
        workingCell != ""
      ) {
        SpreadsheetApp.getActive().toast("This is not a number, please try again.");
      }
    }
    

    注意:

    • 在此修改中,使用了事件对象。因此,当您使用此脚本时,请在“TEST”表上编辑“B13:B27”的单元格。这样,脚本就会运行。
    • 当您直接使用脚本编辑器运行此脚本时,会出现类似Cannot destructure property 'range' of 'e' as it is undefined. 的错误。请注意这一点。

    参考:

    【讨论】:

    • 您好田池,它成功了!非常感谢你。就一个问题。为什么在定义范围时使用'{}'?它是否等于 'var range = e.range' ? (抱歉,我对这个世界很陌生)再次感谢!
    • @Spike Spiegel 感谢您的回复。我很高兴你的问题得到了解决。关于var { range } = e;,这是解构赋值。 Refvar range = e.range 相同。在您的情况下,起初,我认为该值可能会像var { range, value } = e 一样使用。所以我用了它。如果这个解释没有用,我很抱歉。
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多