【问题标题】:TypeError: Cannot read properties of undefined (reading 'range')TypeError:无法读取未定义的属性(读取 \'range\')
【发布时间】:2023-01-24 02:54:15
【问题描述】:

我想在 google 表格中设置一个简单的文件审批工作流程:

  • 在 A 列上,我将有一个文件的链接
  • 在 B、C、D 列上,我将为团队设置复选框。 选中所有 3 个复选框后,col A 中的文件将移动到特定的 Google 云端硬盘文件夹。

我将此脚本作为宏导入,但出现此错误:“类型错误:无法读取未定义的属性(读取‘范围’)”

  • 在最终版本中,文件夹 ID 是正确的
  • 我已从服务 Google Drive 和 Google Sheets 添加
function onChange(e) {
  if (e.range) {
    var checkboxB = e.range.getSheet().getRange(e.range.getRowIndex(), 2).getValue();
    var checkboxC = e.range.getSheet().getRange(e.range.getRowIndex(), 3).getValue();
    var checkboxD = e.range.getSheet().getRange(e.range.getRowIndex(), 4).getValue();
    if (checkboxB && checkboxC && checkboxD) {
      var fileLink = e.range.getSheet().getRange(e.range.getRowIndex(), 1).getValue();
      var folderId = 'THIS_IS_THE_FOLDER_ID'; 
      var file = DriveApp.getFileByUrl(fileLink);
      file.getParents().next().removeFile(file);
      DriveApp.getFolderById(folderId).addFile(file);
      Logger.log('File ' + file.getName() + ' was moved to folder ' + folderId);
    }
  }
}

//onEdit trigger google sheet
function onEdit(e) {
  onChange(e);
}

【问题讨论】:

  • 这是你的确切代码吗?如果您调用 onChange() 而参数中没有 e,就会发生这种情况。错误是说 e 未定义。

标签: javascript google-apps-script


【解决方案1】:

我将此脚本导入为宏

您引用的 onChange(e) 函数旨在通过 installable trigger 运行。

您引用的 onEdit(e) 函数旨在通过 simple trigger 运行。

当您手动编辑电子表格时,这些触发器会自动触发。在这种情况下,event object e 已正确填充。

如果将它们作为宏运行,则这两个函数都不起作用。如果您将它们作为宏运行,则不会填充事件参数 e,从而导致您提到的错误。如果通过跑步脚本编辑器中的按钮。

在最终版本中,文件夹 ID 是正确的

onEdit(e) 函数无法访问DriveApp 类,因为简单触发器无法运行需要授权的方法。

我已从服务 Google Drive 和 Google Sheets 添加

没有必要这样做,因为您没有使用 DriveSheets 高级服务。您使用的 DriveAppSpreadsheetApp 类与那些高级服务不同。

您需要的是一个可安装的“编辑时”触发器。您应该删除可安装的“on change”触发器和onEdit(e) 函数。

【讨论】:

    猜你喜欢
    • 2021-11-26
    • 2021-11-24
    • 2021-12-20
    • 2021-11-27
    • 2022-01-21
    • 2021-12-04
    • 2021-12-09
    • 2021-12-06
    • 2022-01-13
    相关资源
    最近更新 更多