如何使用Google Sheets App删除A列中不包含特定文本的行?

问题描述 投票:0回答:1

我是Google Apps脚本的新手,很抱歉,如果我的问题很冗长。

我正在这里处理各种脚本:

Google Sheets: delete rows containing specified data

((这是我正在编辑的脚本,请注意空的IF值。)

function onOpen(){
}
function deleteFunction(){
var sheetName = "Title"; 
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName(sheetName);

var dataRange = sheet.getDataRange();
var numRows = dataRange.getNumRows();
var values = dataRange.getValues();


var rowsDeleted = 0;
for (var i = 2; i <= numRows; i++){
var rowValues = values[i-1].toString();

if (rowValues == ""){
  sheet.deleteRow(i - rowsDeleted);
  rowsDeleted++; 
}

我想删除名为“ Title”的工作表中不包含“ | My Text Here”的行。可以在文本字符串中找到该文本,例如“此处是可以随机的文本字符串|我的文本在这里”。因此,如果在单元格中未找到“ |我的此处的文字”,则希望删除整行。

我希望它使用的数据集将有〜10,000行,并且我希望此脚本在打开工作表时或每天运行一次。

我曾尝试使这项工作奏效,但我认为我走错了路,因此真的很感谢社区的帮助!

如果需要,我可以附上一张测试纸。

感谢您的帮助和指导

新脚本:

  function main() {

  var SS = SpreadsheetApp.getActive();
  var SHEET = SS.getSheetByName("Title");
  var RANGE = SHEET.getDataRange();


  var DELETE_VAL = "| TEST TEXT HERE";
  var COL_TO_SEARCH = 0; //Zero is first

  var deleteSelectedRows = removeThenSetNewVals();


  };

  function removeThenSetNewVals(){

  var SS = SpreadsheetApp.getActive();
  var SHEET = SS.getSheetByName("Title");
  var RANGE = SHEET.getDataRange();
  var rangeVals = RANGE.getValues();

  var DELETE_VAL = "| TEST TEXT HERE";
  var COL_TO_SEARCH = 0; //Zero is first

  var newRangeVals = [];

  for(var i = 0; i < rangeVals.length; i++){
  if(rangeVals[i][COL_TO_SEARCH] == DELETE_VAL){

  newRangeVals.push(rangeVals[i]);
   };
  };

  RANGE.clearContent();

  var newRange = SHEET.getRange(1,1,newRangeVals.length, 
  newRangeVals[0].length);
  newRange.setValues(newRangeVals);
   };
  }
google-apps-script google-sheets google-sheets-query
1个回答
0
投票

您的代码需要进行以下修改才能以您期望的方式工作

  1. 使用indexOf()。这是一个Javascript方法,可让您验证字符串中是否包含子字符串。就您而言,它允许您验证“ |我的此处的文字”是否包含在A列的单元格中。

  2. 从最后一行到开始行“向后循环”。为什么?因为否则删除行会弄乱其余行的行索引。

function deleteFunction(){
  //declarations
  var sheetName = "Title"; 
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName(sheetName);
  var dataRange = sheet.getDataRange();
  var values = dataRange.getValues();
  for(var i=values.length-1;i>0;i--){
    var myValue=values[i][0];
          Logger.log(i);
    if( myValue.indexOf("| My Text Here")==-1){
      Logger.log(myValue);
      sheet.deleteRow(i+1);
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.