繁体   English   中英

如果找不到匹配项,如何删除单元格?

[英]How to delete cells if no match was found?

我在编写 IF 语句以满足我的条件时遇到困难。 我有 2 张纸:Main 和 Logistics。 第一个包含有关货物及其运输的特定信息,例如拖车、位置和到达日期。 第二张表包含所有的运输信息,如拖车名称、司机、到达、离开等。根据表“物流”上的预定拖车,用户可以指定他想要使用哪些可用拖车来装货有问题。

但是,在预告片因取消而从“物流”中删除的情况下,我无法撤销先前在“主要”上的选择。 我的想法是让这个脚本在两个工作表上寻找 Destination 和 Trailer 的匹配组合(Main 的第 8 和 13 列,物流的第 1 和 2 列)。 如果“Main”上的某一行在“Logistics”上找不到具有相同目的地的匹配预告片,则脚本应将“Main”上的第 13、14 和 16 列设置为空。

有人可以帮我写一个 IF 语句来满足这个条件吗?

我已经附上了我到目前为止的代码。 我认为只有 IF 语句需要修改。 谢谢您的帮助!

function deleteSelection() {
  // Main variables:
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetMain = ss.getSheetByName("Main");
  var tabMain = sheetMain.getRange(2, 1, sheetMain.getLastRow(), 18);
  var dataMain = tabMain.getValues();

  // Logistics variables:
  var sheet = ss.getSheetByName("Logistics");
  var dataRange = sheet.getRange(2, 1, sheet.getLastRow(), 9);
  var data = dataRange.getValues();

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

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

      // Compare data: if there is no match between 2 sheets, set "Trailer", "Position" and "Arrival date" to empty:
      if(dataMain[i][7].toLowerCase() == data[j][0].toLowerCase() && dataMain[i][12] == data[j][1]){  
      } else{
        dataMain[i][12] = "";
        dataMain[i][13] = "";
        dataMain[i][15] = "";
        }

    }

  }

  // Take the modified tab and put it on the spreadsheet
  tabMain.setValues(dataMain);
}

UPD:添加了示例链接 在“物流”上,您可以看到划掉的行,删除后,脚本应删除“主要”上划掉的行。

您正在尝试确定 Main 上的 Event 和 Trailer 值是否与 Logistics 上的值匹配。

我对你采取了稍微不同的方法。 我将主要“EVent”和“Trailer”的值连接起来,并使用该值在 Logistics 上找到匹配项。

  • 如果找到匹配项,则脚本可以跳出该循环并继续进行下一个循环。
  • 如果没有找到匹配,则增加一个变量(因为可以在后续比较中找到匹配)。 但是,一旦对 Logistics 上的所有值都进行了评估,如果不匹配的数量等于 Logistics 上的记录数量,则必须更新 Main 上的值。

function so5992862301() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetMain = ss.getSheetByName("Main");
  var tabMain = sheetMain.getRange(2, 1, sheetMain.getLastRow()-1, 18);
  var dataMain = tabMain.getValues();
  // Logger.log("DEBUG: Last row = "+sheetMain.getLastRow()+", length of dataMain = "+dataMain.length+" tab main = "+tabMain.getA1Notation());

  // Logistics variables:
  var sheet = ss.getSheetByName("Logistics");
  var dataRange = sheet.getRange(2, 1, sheet.getLastRow()-1, 9);
  var data = dataRange.getValues();
  // Logger.log("DEBUG: Logistics Last row = "+sheet.getLastRow()+", length of data = "+data.length+" dataRange = "+dataRange.getA1Notation());  

  // start loop through Main
  for(var i = 0; i < dataMain.length; i++){
    // count the matches
    var mismatch=0

    // start loop through Logistics
    for(var j = 0; j < data.length; j++){

      // match Logistics: Event (Column A) and Trailer (Column B)
      // match Main: Event (Column A) and Trailer (Column C)
      // Compare data: if there is no match between 2 sheets, set "Trailer", "Position" and "Arrival date" to empty:

      var logEventTrailer = data[j][0]+data[j][1];
      var mainEventTrailer = dataMain[i][0]+dataMain[i][2];

      //Logger.log("DEBUG: i:"+i+", Main:"+mainEventTrailer+", j:"+j+" Log:"+logEventTrailer);

      if (mainEventTrailer === logEventTrailer){
        // match
        // Logger.log("DEBUG: Match-"+"i:"+i+", Main:"+mainEventTrailer+", j:"+j+" Log:"+logEventTrailer);
        // if this is a match, then break loop and goto to next i
        break;
      }
      else{
        // no match
        mismatch = mismatch+1
        //Logger.log("DEBUG: No match:"+match+"-i:"+i+", Main:"+mainEventTrailer+", j:"+j+" Log:"+logEventTrailer)

      }

      // how many mismatches
      if (mismatch ==data.length){
        // no match found
        //Logger.log("DEBUG: no match found");
        // update array values for this row
        dataMain[i][2] = "";
        dataMain[i][3] = "";
        dataMain[i][4] = "";
      }

    }

  }
  // update the array values for Main
  tabMain.setValues(dataMain);
}

暂无
暂无

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

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