繁体   English   中英

如果仅使用电子表格脚本的特定列中包含字符串,如何删除行

[英]How to delete rows if contains a string only in a specific column with spreadsheet script

我的这张电子表格的工作表名为“产品”: https : //docs.google.com/spreadsheets/d/1AflG3VgCFdqz1dRbP0JwGBrc5xXL9kwRBk13yEpekTM/edit#gid=1671517193

我在这里找到了初始脚本:// 如果“列A”单元格包含给定的文本,如何在Google表格中删除行

F列包含我的类别,但是我想删除所有包含if的行,其中包含以下字符串:“ CD”“ MP3”“ Todos”

我希望如果可能的话,请遵循以下条件:1.如果包含整个字符串的一部分,则删除。 例如,如果在该列中看到:“ COMPANY / Income / CD / in”,则脚本将被删除,因为该单元格包含“ CD”

  1. 忽略字母大小写。 例如,所有这些都将删除:“ CD”“ cd”“ cD”

在这里,我的代码无法正常工作,因为删除了一些正确的行。 错误在函数findStringAndDeleteRow中。

var sheetName = "Products"; 
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName(sheetName);


function onOpen(){
    SpreadsheetApp.getUi() 
    .createMenu('COMPANY')
    .addItem('Products Cleaner Data', 'findStringAndDeleteRow')
    .addToUi();
  }

function findStringAndDeleteRow() {
  findStringAndDeleteRow_001();
  findStringAndDeleteRow_002();
  findStringAndDeleteRow_003();


}

function findStringAndDeleteRow_001() {
  var values = sheet.getDataRange().getValues();
    for(var i=values.length;i>0;i-=1){
     var lcVal=values[i-1][5].toLowerCase() //Change to all lower case
     var index = lcVal.indexOf(" cd"); //now you only have to check for  contains "glass"
     if (lcVal.indexOf(" cd") > -1){
     sheet.deleteRow(i)};
  }
}
function findStringAndDeleteRow_002() {
  var values = sheet.getDataRange().getValues();
    for(var i=values.length;i>0;i-=1){
     var lcVal=values[i-1][5].toLowerCase() //Change to all lower case
     var index = lcVal.indexOf("mp3"); //now you only have to check for  contains "glass"
     if (lcVal.indexOf("mp3") > -1){
     sheet.deleteRow(i)};
  }
}
function findStringAndDeleteRow_003() {
  var values = sheet.getDataRange().getValues();
    for(var i=values.length;i>0;i-=1){
     var lcVal=values[i-1][5].toLowerCase() //Change to all lower case
     var index = lcVal.indexOf("todos"); //now you only have to check for  contains "glass"
     if (lcVal.indexOf("todos") > -1){
     sheet.deleteRow(i)};
  }
}



我希望删除行中包含任何字符串,例如“ CD”,“ MP3”,“ Todos”

您可以在红色中看到需要删除的列。

这是我测试过的完整工作代码,将其链接到电子表格的副本。 我使用了deleteCells()函数 ,该函数将删除进行匹配的每一行的前7列。

var sheetName = "Products"; 
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName(sheetName);

function onOpen(){
  SpreadsheetApp.getUi() 
  .createMenu('COMPANY')
  .addItem('Products Cleaner Data', 'findAndDelete')
  .addToUi();
}

function findAndDelete() {
  var findArray = ["CD","MP3","TODOS"];
  var rowsDelete = [];
  var data = sheet.getRange(2, 5, sheet.getLastRow()-1 ,1).getValues();

  for(var i=0; i<data.length; i++) {
    var cell = data[i][0].toUpperCase(); 
    var cellArray = cell.split(" / ");  
    Logger.log(cellArray);

    for (var j=0; j<cellArray.length; j++) {
      var value = cellArray[j];

      if(findArray.indexOf(value) != -1) {
        Logger.log(value);
        rowsDelete.unshift(2 + i);
        break;
      }
    }
  }

  for(i=0; i<rowsDelete.length ; i++) {
    var position = sheet.getRange(rowsDelete[i], 1, 1, 7);
    position.deleteCells(SpreadsheetApp.Dimension.ROWS);
  }   
}

观看视频说明

Google SpreadSheet

尝试这个:

function findAndDelete(findArray,searchCol) {
  var findArray=findArray||["CD","MP3","Todos"];//default
  var searchCol=searchCol||"categories";//default
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet177');
  var hA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
  var cObj={};
  for(var i=0;i<hA.length;i++) {
    cObj[String(hA[i]).toLowerCase()]=i+1;
  }
  var srg=sh.getRange(2,cObj[searchCol.toLowerCase()],sh.getLastRow()-1,1);
  for(var i=0;i<findArray.length;i++) {
    var f=srg.createTextFinder(String(findArray[i])).matchCase(true).findAll();
    var d=0;
    if(f.length>0) {
      for(var j=0;j<f.length;j++) {
        sh.deleteRow(f[j].getRow()-d++);
      }
    }
  }  
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM