Google表格 - 如何找到包含特定文本的第一行号,然后清除/删除所有内容要结束



我当前正在导入一堆数据,然后将其分成多个列,然后尝试清除或删除任何错误的行(这是一个原始数据导入,其中包含一堆废料行(。

到目前为止,我已经有数据导入,分开&分类。现在,我正在尝试根据A列中的一个值查找行号,然后选择所有行到表的末端以删除或清除内容。

我到了我所有的数据都分为我需要的列(a:j(并进行排序的地步只是想找到包含" ---------------------"的第一行,这将是我的第一个'垃圾'行。

outputrange.setValues(output);
pull1.deleteRows(1, 40);
pull1.getRange(2, 1, pull1.getLastRow()-1, 
pull1.getLastColumn()).activate().sort({column:2, ascending: true});
    var removalValues = range.getValues()
    for (var j=0; j<removalValues.length; j++) {
      var rowArray = removalValues[j];
      for (var k=0; k<rowArray.length; k++) {
        var columnValue = rowArray[k];
        if (rowArray[0] === "----------------------") {
          var rowNumber = i;
          pull1.getRange(rowNumber, 1, 1, pull1.getLastColumn()).activate()
        }
      }
    }

我尝试过上面的代码循环并找到正确的单元格引用,并暂时突出显示该行,因此我确保其正常运行。目前,我的代码过程中的这一部分,但否则什么也不做。实际上,我只需要在A列中查看我的数据并找到匹配数据,然后为我返回行号,以便将其应用于其他公式。

编辑:我使用一些其他资源更新了代码,并提出了以下内容。似乎正常工作,但我不确定它是否是最有效的解决方案:

        var outputrange = pull1.getRange(startRow, 1, LR-startRow+1, 10)
        outputrange.setValues(output);
        pull1.deleteRows(1, 40);
        pull1.getRange(2, 1, pull1.getLastRow()-1, 
        pull1.getLastColumn()).activate().sort({column:2, ascending: true});
        var rangeData = pull1.getDataRange();
        var lastColumn = rangeData.getLastColumn();
        var lastRow = rangeData.getLastRow();
        var searchRange = pull1.getRange(1,1,lastRow-1,lastColumn-1);
        var removalValues = searchRange.getValues();
        for (j=0; j < lastColumn-1; j++) {
          for (k=0; k < lastRow-1; k++) {
            if(removalValues[k][j] === "----------------------") {
              pull1.getRange(k+1, 1, pull1.getLastRow(), 10).deleteCells(SpreadsheetApp.Dimension.ROWS);
            }
          }
        }

要求:

查找指定的文本,然后删除下面所述文本的所有行。


解决方案:

使用textFinder查找文本,然后将结果行传递到deleteRows()

function findAndClear() {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sh.getLastRow() + 1;
  var range = sh.getRange(1, 1, lastRow);
  //find specified text and return row number
  var row = range.createTextFinder('----------------------').findNext().getRow();
  //calculate number of rows to delete
  var delRows = lastRow - row;
  //delete rows
  sh.deleteRows(row, delRows);
}

说明:

首先,对不起,但是我已经取消了您使用的脚本。无需获得列中的所有值,然后循环遍历每个值,它过于复杂且慢。

使用textFinder要快得多,没有循环循环段落,只是在A列中找到字符串的第一次出现并获取行号。


注意:

如果您确实想保留包含字符串的行,请使用:

sh.deleteRows(row + 1, delRows);

参考:

  1. textFinder文档

最新更新