【问题标题】:How to make trigger script work in google sheets?如何使触发脚本在谷歌表格中工作?
【发布时间】:2020-06-11 03:29:27
【问题描述】:

我的目的是在每次选择工作表上的任何内容时在特定单元格上生成一个随机数。那么我应该怎么做才能使下面的代码工作呢?

/**
 * The event handler triggered when the selection changes in the spreadsheet.
 * @param {Event} e The onSelectionChange event.
 */
function onSelectionChange(e) {
  // Set background to red if a single empty cell is selected.
  var range = e.range;
  if(range.getNumRows() === 1 
      && range.getNumColumns() === 1 
      && range.getCell(1, 1).getValue() === "") {
      range.set(RAND());
  }
}

当我执行上面的代码时,我得到了这样的错误TypeError: Cannot read property 'range' of undefined (line 7, file "triggers")

这是我第一次在工作表中使用脚本工具

【问题讨论】:

    标签: javascript google-apps-script google-sheets triggers


    【解决方案1】:

    这个答案怎么样?

    修改点:

    • onSelectionChange 是简单触发器的功能。而onSelectionChange(e)e 是事件触发器。当事件被触发时,e 具有值。所以从你Cannot read property 'range' of undefined的错误信息来看,我想你可能是直接在脚本编辑器上运行函数onSelectionChange。在这种情况下,没有给出事件对象。这样,就会发生这样的错误。
    • 在您的脚本中,有一个修改点。我认为range.set(RAND()); 可能是range.setValue(RAND());
    • 我觉得range.getCell(1, 1).getValue() === ""可以修改为range.isBlank()

    当以上几点反映到你的脚本中时,它变成如下。

    修改脚本:

    /**
     * The event handler triggered when the selection changes in the spreadsheet.
     * @param {Event} e The onSelectionChange event.
     */
    function onSelectionChange(e) {
      // Set background to red if a single empty cell is selected.
      var range = e.range;
      if(range.getNumRows() === 1 
          && range.getNumColumns() === 1 
          && range.isBlank()) {  // Modified
          range.setValue(RAND());  // Modified
      }
    }
    
    • 为了运行此功能,请将上面的脚本复制并粘贴到电子表格的脚本编辑器中,并保存脚本。并且,请在电子表格中选择一个单元格。这样,onSelectionChange 由简单触发器运行。
    • 在本次修改中,假设函数RAND()有效。

    参考资料:

    补充:

    当你想在单元格被选中时将RAND()的值放到单元格“A1”中,下面的脚本怎么样?

    示例脚本:

    function onSelectionChange(e) {
      e.range.getSheet().getRange("A1").setValue(RAND());
    }
    

    示例情况:

    作为示例情况,当使用此脚本时,可以看到以下结果。

    function onSelectionChange(e) {
      e.range.getSheet().getRange("A1").setValue(Math.random());
    }
    

    【讨论】:

    • 应该是 Row1Column1 应该是 A1 吧?我保存了脚本并返回到我的工作表,但是当我尝试随机选择任何内容时,A1 仍然相同,没有任何变化。我不确定脚本是否正在运行。
    • @Ahiung Lim 感谢您的回复。我为我糟糕的英语水平道歉。我在答案中又添加了一个脚本。你能确认一下吗?当单元格被选中时,该脚本将RAND() 的值放到单元格“A1”中。
    • 嗯很奇怪,不工作。我是否必须以某种方式将脚本连接到相关工作表,例如插件?似乎脚本根本没有运行。
    • 你的英语很好,我更喜欢基础英语而不是学者水平的英语。
    • 抱歉,忘记勾选解决方案按钮,因为我正在写另一个问题,哈哈,顺便说一句,Tanaike,你很有帮助。对此我表示感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多