首页 > 解决方案 > 使用 Google Apps 冻结表格中的行会引发类型错误

问题描述

我正在尝试使用 GAS 来冻结每张纸的第一行。它可以工作,冻结所需的行,但返回错误:

“TypeError:无法调用未定义的方法 setFrozenRows”(第 6 行,文件“freezeLabelRows”)

根据 Google 文档,语法是正确的。我正在从附加到我正在开发应用程序的工作表的代码编辑器中运行脚本。我尝试了一个数字 (1),其中 numRowsFr 现在是;这是我用来躲避这个错误的一种解决方法。

function rowFreeze() {
  var numSheets = SpreadsheetApp.getActiveSpreadsheet().getNumSheets();
   for(var i = 0; i <= numSheets; i++) {
     var frSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[i];
     var numRowsFr = 1;
     frSheet.setFrozenRows(numRowsFr);
   }
}

正如我所说,代码可以冻结每张纸上所需的行,但会返回错误。我想让这个应用程序的其余部分到位,以便为当前用户升级。

标签: arraysfor-loopgoogle-apps-scriptgoogle-sheetsoff-by-one

解决方案


问题:

  • 数组索引从 0 开始,到数组 -1 的长度结束。当您<=numSheets用作循环条件时,您在数组(工作表数组)的末尾循环。在最后一张纸之后,frsheet将是未定义undefined的并且没有setFrozenRows方法,因为它不是图纸类型。

解决方案:

  • 仅循环到数组的末尾。

片段:

i <= numSheets - 1;

或者

i < numSheets;

推荐阅读