首页 > 解决方案 > 如何在 Google 表格 onEdit 触发器中获取范围

问题描述

我试图写一个简单的编辑功能:

function onEdit(e) {
  var row = parseInt(e.range.getRow())
    if(row > 19){
      //This doesn't work because its reading a strig instead of a number.  Who knows why
      var rng = e.source.getRange(21,1,1,6)//.getValues()[0].join('').length
      e.source.toast(rng.getValue())
    
    if (length===0){
      e.source.getRange(row,8).setBackground('white')
    } else {
      e.source.getRange(row,8).setBackground('red')
    }
    
  }  
}

我得到了这个错误:

例外:参数(字符串、数字、数字、数字)与 SpreadsheetApp.Spreadsheet.getRange 的方法签名不匹配。

在此处输入图像描述

我实际上想这样做:

var rng = e.source.getRange(row,1,1,6).getValues()[0].join('').length

但即使是数字 21 现在也是一个字符串。这就像它自己的奇异世界,其中一些数字是字符串。我什至做了一个偏执的 parseInt。这是一个全新的世界。

我曾经让这个问题出现在问题的顶部。我没有太多的礼仪或做法,但我今天早上在这个问题上看到了这一点。 在此处输入图像描述

我必须告诉你,这些答案都不是补救措施。问题中的关键限定符是 onEdit 触发器上症状的出现,并且知道事件对象 e.source 不是工作表,而是其他一些对象。这就是为什么它是强制的。此外,考虑到它的松散类型和所有内容,javascript 可以强制执行也很奇怪。知道第二个,现在很明显我有错误的对象。这就是问题的答案。否则,获取范围。不太难。两种不同的 getRanges,一种在未记录的对象上。很难占卜。

标签: google-apps-scriptgoogle-sheets

解决方案


推荐阅读