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

Google apps script 如果找不到匹配项,如何删除单元格?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我在编写IF语句以满足我的条件时遇到困难。我有两张表:主表和物流表。第一个是关于货物及其运输的具体信息,如拖车、位置和到达日期。第二张表包含所有运输信息,如拖车名称、驾驶员、到达、出发等。根据“物流”表上的预定拖车,用户可以指定他希望用于相关货物的可用拖车 然而,在由于取消而将拖车从“物流”中删除的情况下,我无法撤销之前在“主要”上所做的选择。我的想法是让这个脚本在两个页面上寻找目的地和拖车的匹配组合(主屏幕上的第8列和第13列,物流上的第1列和第2列)。如果“Main”上有一行,在“Logis

我在编写IF语句以满足我的条件时遇到困难。我有两张表:主表和物流表。第一个是关于货物及其运输的具体信息,如拖车、位置和到达日期。第二张表包含所有运输信息,如拖车名称、驾驶员、到达、出发等。根据“物流”表上的预定拖车,用户可以指定他希望用于相关货物的可用拖车

然而,在由于取消而将拖车从“物流”中删除的情况下,我无法撤销之前在“主要”上所做的选择。我的想法是让这个脚本在两个页面上寻找目的地和拖车的匹配组合(主屏幕上的第8列和第13列,物流上的第1列和第2列)。如果“Main”上有一行,在“Logistics”上找不到具有相同目的地的匹配拖车,则脚本应将“Main”上的第13、14和16列设置为空

有人能帮我写一个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);
}
函数deleteSelection(){
//主要变量:
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheetMain=ss.getSheetByName(“Main”);
var tabMain=sheetMain.getRange(2,1,sheetMain.getLastRow(),18);
var dataMain=tabMain.getValues();
//物流变量:
var表=ss.getSheetByName(“物流”);
var dataRange=sheet.getRange(2,1,sheet.getLastRow(),9);
var data=dataRange.getValues();
对于(var i=0;i

UPD:添加了一个示例。在“Logistics”中,您可以看到被划掉的行,删除该行后,脚本应删除“Main”中被划掉的行

您正在尝试确定Main上的事件和拖车值是否与Logistics上的值匹配

我对你采取了稍微不同的方法。我将主“事件”和“拖车”的值连接起来,并使用该值查找物流上的匹配项

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

功能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(“调试:最后一行=“+sheetMain.getLastRow()+”,dataMain的长度=“+dataMain.length+”tab main=“+tabMain.getA1Notation());
//物流变量:
var表=ss.getSheetByName(“物流”);
var dataRange=sheet.getRange(2,1,sheet.getLastRow()-1,9);
var data=dataRange.getValues();
//Logger.log(“调试:后勤最后一行=“+sheet.getLastRow()+”,数据长度=“+data.length+”dataRange=“+dataRange.getA1Notation());
//通过主回路启动回路
对于(var i=0;i
请您解释/演示如何在“Main”上分配拖车。在对您的脚本进行评论之前,有必要先了解您为什么“无法撤销以前在“Main”上所做的选择”。您的解决方案可能不使用此脚本,它可能与在Main上分配预告片的过程有关。@Tedinoz,我正在使用AppSheet(无代码应用程序平台)用于分配现有拖车。应用程序能够显示特定目的地的现有拖车列表,允许用户进行选择,然后记录在“主”上。但是,由于数据分布在两张图纸之间,AppSheet无法覆盖之前在“主”上所做的选择一旦信息从“物流”中删除。好的。很讽刺,不是吗。不管怎样,w有什么问题
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);
}