sheet.deleteRows()需要从顶部删除所有包含数据的行(最好是第2行)

时间:2016-06-01 19:25:38

标签: google-apps-script google-sheets

每天需要删除200-300行数据。单击菜单项,我想删除所有这些行。我已经有了一个似乎部分工作的脚本(它只删除了几行......但是我没有这么做了)我应该说。希望有人可以为加快进程或提供新的代码设计提供一些启示,

**如果可能排除ROW_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); }

}

SAMPLE SHEET - TAKE COPY

4 个答案:

答案 0 :(得分:19)

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

var start, end;

start = 2;
end = sheet.getLastRow() - 1;//Number of last row with content
      //blank rows after last row with content will not be deleted

sheet.deleteRows(start, end);

Apps Script Documentation

答案 1 :(得分:3)

FYI:getLastRow()返回最后一行WITH内容的索引。使用getMaxRows()返回绝对的最后一行(无论内容如何)。

答案 2 :(得分:0)

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

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

App Script Reference

答案 3 :(得分:0)

使用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 )。

这也可以解决起始行或起始行以下没有非空白行的情况。