sheet.deleteRows() - 需要删除所有带有数据的行,从顶部开始(最好是从第二行开始)。

9

我需要删除200-300行,但不包括第一行。下面的脚本出现了越界错误,并且速度很慢。请问有什么方法可以加快这个过程吗?

** 如果可能,请排除行1。

function clearRange() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('test');

  var start=1;
  var end=300;
  for (var i = start; i <= end; i++) 
    { sheet.deleteRow(i); }

}

样本表格 - 复制

5个回答

42

不要使用for循环。在Google电子表格中,您可以一次性删除多行:

var start, howManyToDelete;

start = 2;//Hard coded row number from where to start deleting

howManyToDelete = sheet.getLastRow() - start + 1;//How many rows to delete -
      //The blank rows after the last row with content will not be deleted

sheet.deleteRows(start, howManyToDelete);

如果您想删除从第2行到第10行,也就是9行数据,那么需要指定要删除的行数为9。删除这些行后,只会剩下第1行数据。

Apps Script文档


2
这是正确的做法。文档指定您应尽可能少地调用编辑函数。另一个例子是将数据写入电子表格。不要使用循环将数据输出到电子表格,而应该将所有内容输出到数组中,然后再将数组写入电子表格。 - Vytautas
这个应该使用 start 变量来确定要删除的计数。链接也失效了,应该是 https://developers.google.com/apps-script/reference/spreadsheet/sheet#deleterowsrowposition,-howmany。 - tehhowch
1
谢谢!简单易用,效果很棒 :) - Skorejen

7

提示:getLastRow() 返回有内容的最后一行的索引。使用 getMaxRows() 返回绝对的最后一行(无论是否有内容)。


4

使用Alan Wells的答案时要注意!(编辑:他已经修正了他的答案。)

getLastRow() 返回具有内容的最后一行的 索引

但是,deleteRows(rowPosition, howMany) 中的第二个参数是要删除的行数,而不是最后一行的索引。

因此,要删除特定行后的所有非空行,您需要执行以下操作:

function deleteAllBelow(startFrom)
{
    // get last row index
    var lastRowWithContent = sheet.getLastRow();

    if(lastRowWithContent < startFrom)
    {
        // rows below startFrom are already blank!
        return;
    }
    
    // count total number of rows to be deleted
    // +1 is to include the last row
    var totalRowsToBeDeleted = lastRowWithContent - startFrom + 1;
    
    sheet.deleteRows(startFrom, totalRowsToBeDeleted); 
}

假设最后一行的内容为20。

现在deleteAllBelow(15);将删除从15到20之间的所有非空行,totalRowsToBeDeleted将是6(因为15和20都被包括在内)。

这也处理了以下情况:从您的起始行开始,没有非空行或没有在起始行及以下位置找到非空行。


0

嗨,

如果有人想要删除行但不想删除它们的格式,可以使用 clearContent() 方法而不是 deleteRows(),不过需要使用 getRange()。

let sheet = SpreadsheetApp.getActiveSheet(); 
sheet.getRange(1,1,sheet.getLastRow(),3).clearContent();

-1

如果你想删除所有行,可以使用 clear 函数。

// This example assumes there is a sheet named "first"
var ss = SpreadsheetApp.getActiveSpreadsheet();
var first = ss.getSheetByName("first");
first.clear();

应用脚本参考


2
Clear 不会删除行,它只会删除行内容和属性,例如数据验证、注释等。 - Rubén

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接