0

我有一个函数,旨在检测一个电子表格中的更改,并将它们复制到另一个电子表格中的相同单元格位置,如果在 sheet1 中进行了更改。我首先尝试使用 sheetAPI 提供的已安装 onEdit(e) 函数来执行此操作,但一直遇到我无权从内置函数打开新电子表格的错误。我尝试设置自己的触发器,但即使我为函数分配了 OnEdit 触发器,它也不会激活。

function ChangeDetect(e){
  var range = e.range 
  var esheet = SpreadsheetApp.getActiveSheet()
  var ss = SpreadsheetApp.getActiveSpreadsheet()
   var sheet = ss.getSheets()[1];
  // literally, if the edit was made in the first sheet of the spreadsheet, do the following:
  if (esheet.getIndex() == ss.getSheets()[0].getIndex()){
    var numrows = range.getNumRows();
    var numcols = range.getNumColumns();
    for (var i = 1; i <= numrows; i++) {
      for (var j = 1; j <= numcols; j++) {
        var currentValue = range.getCell(i,j).getValue();
        var cellRow = range.getCell(i,j).getRow();
        var cellCol = range.getCell(i,j).getColumn();



        var ss3 = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1K2ifzjPTATH77tV4xInh0Ga2SuPsLdgNRSbekjDx-w8/edit#gid=0')
        var sheet3 = ss3.getSheets()[0];
        sheet3.getRange(cellRow,cellCol).setValue(currentValue)
      }
    }
  }
}
4

1 回答 1

1

我认为您可能遇到了可安装触发器的限制/限制

限制

因为简单的触发器会自动触发,而不需要用户授权,所以它们受到几个限制:

  • 该脚本必须绑定到 Google 表格、文档或表单文件。
  • 如果以只读(查看或评论)模式打开文件,它们不会运行。
  • 他们无法访问需要授权的服务。例如,一个简单的触发器不能发送电子邮件,因为 Gmail 服务需要授权,但是一个简单的触发器可以翻译一个带有 - 语言服务的短语,它是匿名的。
  • 他们可以修改他们绑定的文件,但不能访问其他文件,因为这需要授权。
  • 他们可能也可能无法确定当前用户的身份,这取决于一组复杂的安全限制。
  • 它们的运行时间不能超过 30 秒。
  • 在某些情况下,Google 表格、文档和表单的附加组件会运行 - 它们的 onOpen(e) 和 onEdit(e) 在无授权模式下简单触发,这会带来一些额外的复杂性。有关更多信息,请参阅附加授权生命周期指南。 这些限制不适用于 doGet() 或 doPost()。
于 2017-09-20T09:32:38.887 回答