0

这是我第一天搞乱谷歌脚本,所以请原谅我的限制。

我试图编写一个函数,删除表单电子表格中的所有行,同时留下标题行。

为什么会这样:

  // Loop through the data in the range and delete the rows
if (data.length > 1) {
  for (var row = 1; row < data.length; row++) {
    ws.deleteRow(row+1);
    }
    ws.deleteRow(2); 

 }

而以下:

if (data.length > 1) {
  for (var row = 1; row < data.length; row++) {
    ws.deleteRow(row+1);
    }

  }

将第 2 行留在后面

4

1 回答 1

0

因为行索引是基于 1 的(即从 1 开始),所以您需要像这样更改您的 for 循环:

for (var row = 1; row <= data.length; row++) {

假设您有 2 行,当您在循环中点击第二行时(即 row = 2 时), 的值row将不小于data.length(即2);它将等于data.length。_ 因此,使用<,测试将失败,并且循环中的代码将不会第二次执行。<=它将通过并且代码将根据需要执行。

这种相同的模式当然会发生在任意数量的行上。

编辑:其他一些问题:

因为移除将立即发生,所以行将在移除后全部移动并且编号不同。这可以通过几种方式处理,但这里有一个:将删除更改为从头开始并向后工作。所以,现在我们有:

for (var row = data.length; row >= 1; row--) {

此外,如果您只是想跳过第一行作为标题行,而不是更改使用的索引(例如,row + 1),只需更改开始/停止循环的位置。这更简单,更容易理解。因此,循环变为:

 for (var row = data.length; row >= 2; row--) {
    ws.deleteRow(row);
 }
于 2012-11-05T04:36:28.490 回答