繁体   English   中英

如果单元格与列表中的值匹配,则应用脚本删除行

[英]App Script to delete rows if cells match values from list

当行中的特定单元格与另一张表中列表中的任何值匹配时,我试图删除行。 我发现现有的解决方案只处理要匹配的单个值。

我在下面的脚本要么删除错误的行(单元格与列表中的任何值都不匹配),要么返回错误“行超出范围”。 任何指针表示赞赏。

function main() {

  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName("Sheet1"); 
  var ssData = sheet.getRange('A2:I').getValues(); 

  var negSheet = ss.getSheetByName("negs");
  var negValues = negSheet.getRange('A1:B').getValues();

  Logger.log(negValues);

  for(var i = 0; i < ssData.length; i++) {

    var row = ssData[i];
    var matched = row[2];

    if(matched == "")
      break;

    Logger.log(matched);

    for(var j = 0; j < negValues.length; j++) {

      var negRow = negValues[j];
      var negVal = negRow[0];

      if(negVal == "")
        break;


      var rowsDeleted = 1;
      for(k = 0; k < ssData.length; k++) {

      if (matched == negVal) {
        sheet.deleteRow(rowsDeleted);
        rowsDeleted--; // Deleted a row     

        continue;

      } else {
        rowsDeleted++; // Go to the next row

  }

      }

  }

  }}

尝试这个:

function deleteRowsWithValuesThatHaveMatchesinList() {
  const ss=SpreadsheetApp.getActive();
  const list=ss.getSheetByName('List');
  const rg=list.getRange(1,1,list.getLastRow(),1);//assuming list is in column 1
  const lvA=rg.getValues().map(function(r){return r[0]});
  const sh=ss.getSheetByName('Sheet');
  const rg1=sh.getDataRange();
  const vs=rg1.getValues();
  let d=0;
  let x='index of column you searching for'
  vs.forEach(function(r,i){
    if(lvA.indexOf(r[x])!=-1) {
      sh.deleteRow(i+1-d++);
    }
  });
}

也许是这样:

function deleteRowsWithValuesThatHaveMatchesinList() {
  const ss=SpreadsheetApp.getActive();
  const list=ss.getSheetByName('List');
  const rg=list.getRange(1,1,list.getLastRow(),1);//assuming list is in column 1
  const lvA=rg.getValues().map(function(r){return r[0]});
  const sh=ss.getSheetByName('Sheet');
  const rg1=sh.getDataRange();
  const vs=rg1.getValues();
  let d=0;
  let x='index of column you searching for'
  vs.forEach(function(r,i){
    for(var j=0;j<lvA.lengh;j++) {
      if(lvA.join('~~~').indexOf(r[x])!=-1){
        sh.deleteRow(i+1-d++);
      }
    }
  });
}

暂无
暂无

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

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