【问题标题】:Suddenly Stops working: TypeError: Cannot read property 'getRange' of null [duplicate]突然停止工作:TypeError:无法读取 null 的属性“getRange”[重复]
【发布时间】:2022-02-11 03:11:50
【问题描述】:

编辑:我已将电子表格的副本附在另一个帐户上。到目前为止,无论提供的解决方案或其他答案的链接如何,我仍然遇到同样的问题。

https://docs.google.com/spreadsheets/d/1feRQ7txV5dI-7Ein66-Z6LjF5w8vdmtw8gACk_motic/edit?usp=sharing

编辑 2:下面提供的屏幕截图显示了执行屏幕截图。这是在P3 中使用 col===57 触发的

我已经阅读了 StackOverflow 上的一堆答案,但似乎没有一个适合这里发生的事情,这真的让我陷入了循环。希望有人可以提供帮助!

这个脚本运行了 3 个月。所做的唯一更改是对 var tc 编号(即,要检查哪一列作为触发器)。其他一切都没有改变。最奇怪的部分...如果触发第 6-25 行,一切正常。如果触发第 26-45 行,我会收到错误消息。所以我不知道为什么它会在它工作 3 个月时停止工作,它的一部分工作但另一个没有,而且我没有更改工作表或脚本中的任何名称/标签。

(顺便说一句,我确实检查了常见的修复方法,例如确保工作表名称 100% 相同,包括大小写、空格等)

应该发生什么:

在给定的工作表中,当有人在由列指示的特定复选框上选择 TRUE 时,该工作表中的行将移动到工作流中的下一个工作表。例如,如果“Prospect”第 21 行标记为 true,则它会移至“Pricing”,然后从“Prospects”中删除。

现在发生了什么:

一切都适用于潜在客户 -> 定价、定价 -> 入职和入职 -> DASH。 管理员 -> 书籍,书籍 -> 准备,准备 -> 审查,审查 - 归档没有任何作用。相反,我收到以下错误消息:

2022 年 2 月 9 日下午 4:19:23 错误类型错误:无法读取 null 的属性“getRange” 在 onEdit(代码:56:47)

编辑:添加了用于参考的工作表图像。此脚本中未使用指标,因此可以忽略。

function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var r = event.range;
  var s = event.source.getActiveSheet();
  var sheetName = s.getName();
  if (sheetName == "Prospects") {
    var ts = "Pricing";
    var as = "ARCHIVED";
    var tc = 11;
    var bc = 200;
    var ar = 45
  } else if (sheetName == "Pricing") {
    var ps = "Prospects";
    var ts = "Onboarding";
    var as = "ARCHIVED";
    var tc = 34;
    var bc = 11;
    var ar = 45
  } else if (sheetName == "Onboarding") {
    var ps = "Pricing";
    var ts = "DASH";
    var as = "ARCHIVED";
    var tc = 46;
    var bc = 34;
    var ar = 45
  } else if (sheetName == "ADMIN") {
    var ps = "DASH";
    var ts = "BOOKS";
    var tc = 55;
    var bc = 500;
  } else if (sheetName == "BOOKS") {
    var ps = "ADMIN";
    var ts = "PREP";
    var tc = 56;
    var bc = 10;
  } else if (sheetName == "PREP") {
    var ps = "BOOKS";
    var ts = "REVIEW";
    var tc = 57;
    var bc = 11;
  } else if (sheetName == "REVIEW") {
    var ps = "PREP";
    var ts = "FILING";
    var tc = 58;
    var bc = 12;
  }

  var targetSheet = "";
  if (r.getColumn() == tc && event.value == "TRUE") {
    targetSheet = ts;
  } else if (r.getColumn() == bc && event.value == "FALSE") {
    targetSheet = ps;
  }  else if (r.getColumn() == ar && event.value == "TRUE") {
    targetSheet = as;
  }
  var lastRow = ss.getSheetByName(targetSheet).getRange(1, 1).getDataRegion(SpreadsheetApp.Dimension.ROWS).getLastRow()
  var row = r.getRow();
  var numColumns = s.getLastColumn();
  var target = ss.getSheetByName(targetSheet).getRange(lastRow + 1, 1);
  s.getRange(row, 1, 1, numColumns).moveTo(target);
  s.deleteRow(row);  

【问题讨论】:

  • 您确定满足所有条件吗?我会放一个 SpreadsheetApp.getUi().alert(targetSheet);在 var lastRow = 之前,看看你得到了什么。
  • 可能没时间了
  • 前景没有ps
  • Prospects 没有 ps,因为 ps 将事物向后移动,从第一步开始没有任何东西可以向后移动。
  • @TheMaster 谢谢你,我会的!我从你和这里的其他人那里学到了很多东西。我真的很感激它,并希望在我继续学习的过程中能够帮助其他人。我一定会阅读并练习遵循它

标签: google-apps-script google-sheets


【解决方案1】:

试试这个:

function onEdit(e) {
  const vA = [{ name: "Prospects", ps: "", ts: "Pricing", as: "ARCHIVED", tc: 11, bc: 200, ar: 45 }, { name: "Pricing", ps: "Prospects", ts: "Onboarding", as: "ARCHIVED", tc: 34, bc: 11, ar: 45 }];//need to fill in the rest of the array
  const sh = e.range.getSheet();
  const name = sh.getName();
  for (let i = 0; i < vA.length; i++) {
    if (name == vA[i].name) {
      let tshname;
      if (e.range.columnStart == vA[i].tc && e.value == "TRUE") {
        tshname = vA[i].ts;
      } else if (e.range.columnStart == vA[i].bc && e.value == "FALSE") {
        tshname = vA[i].ps;
      } else if (r.range.columnStart == vA[i].ar && e.value == "TRUE") {
        tshname = vA[i].as;
      }
      let tsh = e.source.getSheetByName(tshname);
      let lastRow = tsh.getRange(1, 1).getDataRegion(SpreadsheetApp.Dimension.ROWS).getLastRow()
      sh.getRange(e.range.rowStart, 1, 1, sh.getLastColumn()).moveTo(tsh.getRange(lastRow + 1, 1));
      sh.deleteRow(e.range.rowStart);
      break;
    }
  }
}

您需要完成 vA 数组。

【讨论】:

  • 我尝试了这个脚本,令人惊讶的是它与原始代码有完全相同的问题 - 它适用于通过 Dash 的 Prospects,但通过归档的管理员收到此错误:TypeError: Cannot read property 'getRange'在 onEdit(代码:16:25) 处为 null
猜你喜欢
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 2014-05-04
相关资源
最近更新 更多