填写上一行时自动添加行,"这些行超出范围(第 8 行,文件"代码")错误



我正在为一家音频/视频公司创建一个提案生成器。构建器使用数据验证下拉列表,以便从设备类型(音频、灯光、电气等(列表中进行选择。根据所选内容,以下数据验证单元格将下拉,其中包含该类型设备的子选项。

其中一些项目相当大,需要大量设备,而另一些则要小得多。我想设置它,以便在选择一件设备时在其下方创建另一行,并允许选择更多选项......另一种方法是手动插入一行并向下复制前一行的公式,或者预先填写一堆可能被选中的行,这可能会有一堆额外的行(对于将被重复使用的东西来说不是很好数百次(

我已经尝试了下面的脚本,我希望它会在我正在填写的当前行(第 40 行(下面添加一行。 图片示例

function addRows(){
var startRow = 40;
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
for (var i=numRows; i > -1; i--) {
sheet.insertRowsAfter(i + startRow, 1);
}
}

这个脚本一直给我"那些行越界(第 8 行,文件"代码"(错误。

有什么想法吗?

编辑:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

运行此脚本一次会在底部返回一个添加的行,但似乎每次我运行它之后它都会使添加的行数翻倍。

第一次运行:添加 1 行 第二次运行:添加 2 行 第三次运行:添加 4 行 第 4 次运行:添加 8 行

此脚本中是否有明显的东西导致这种情况发生?

运行两次后的图像

insertRowsAfter(afterPosition, howMany( 有 2 种方式抛出该错误(请参阅文档(:

  • 第一个参数为 0

  • 第一个参数大于该工作表中存在的行数。(因为如果您的工作表甚至没有 400 行,则无法在第 400 行之后插入(。

通过查看您的代码,很明显,发生此错误是因为您的第一个参数大于工作表中的行数。为了向您展示这是如何发生的,这里有一个可能的错误情况:

  • 想象一下,您的工作表中有 120 行,所有行都充满了数据

  • 当您的工作表已满时,行数 = 120var numRows = rows.getNumRows();

  • 当您进行第一次循环迭代时,您将sheet.insertRowsAfter(120 + startRow, 1);

  • 这导致脚本尝试在第 160 行之后插入 1 行,该行甚至不存在(没有绑定(。

我不确定我是否真的得到了你对该代码的计划,尤其是 for 循环。但是,如果您想在此之后插入一行或 N 行,只需像这样:

var startRow = 40;
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
sheet.insertRowsAfter(startRow , 1); //or any number N instead of 1

最新更新