【问题标题】:Still return as FALSE even for MATCH values between 2 google sheets?即使对于 2 个谷歌表之间的 MATCH 值,仍然返回 FALSE?
【发布时间】:2020-11-10 01:12:17
【问题描述】:

我已经尝试了几天,但仍然无济于事。我正在尝试验证在 gsheet“testslip”中输入的 testID 和电子邮件地址与在 gsheet“students”中输入的那些。如果两者都匹配,则来自 gsheet“testslip”的 URL 将在匹配行的 gsheet“students”中更新。否则,错误将通过电子邮件发送到 gsheet "testslip" 中的电子邮件地址,以通知他们采取必要的措施。当我运行下面的代码时,即使两个 gsheets 中的两个条目都正确匹配,输出仍然是通过电子邮件发送的错误。如果我删除对“不匹配”值的检查,那么输出将如预期的那样,即 URL 将被更新。但这样做意味着我的脚本不能处理负面情况,那样会破坏目标。请帮助我更正下面的代码。提前谢谢你:-

    function testslipupdate(){
      var psheet=SpreadsheetApp.openById("1O2-xzPCjQO0cj_6LjehFnKmmTL519gXEpRYwRoEwIFA").getSheetByName("testslip");
      var msheet=SpreadsheetApp.openById("1yLXRoV4MH6p_5F6rX3MnGnruDQVr4dqK-6GhRjRv3ns").getSheetByName("students");
     
      var lrow = psheet.getLastRow();
      var testID = psheet.getRange(lrow,2).getValue();
      var uemail = psheet.getRange(lrow,3).getValue();
      var slip = psheet.getRange(lrow,4).getValue();
      
      
      var data = msheet.getDataRange().getValues();
      var dtlen = data.length;
    
      
      for(var i =1; i<data.length;i++){
         if(data[i][0] == testID && data[i][2]==uemail){
         msheet.getRange(i+1,20).setValue(slip);  
         break;
         }
         //else if(data[i][0]==testID && data[i][2]!==uemail){ 
         else if(data[i][2]!==uemail){
              MailApp.sendEmail(""+uemail+"","Email address is not matched with Test ID","","Please change to valid email address");     
              break;     
              }   
         //else if(data[i][0]!==testID){
         else {
              MailApp.sendEmail(""+uemail+"","Record not found","","Please see Principal for a new registration.");
              break;
              }
      }
    }

【问题讨论】:

  • 如果不查看您的数据就很难排除故障 - 您在代码中提供了电子表格 ID,但无法访问电子表格。请提供对示例电子表格的访问权限以进行故障排除。
  • 您的问题与else if(data[i][2]!==uemail){else if(data[i][0]==testID &amp;&amp; data[i][2]!==uemail){ 行有关吗?当你说even both entries in both gsheets are matched correctly, the output is still the error being emailed - 是不是意味着你没有进入案例if(data[i][0] == testID &amp;&amp; data[i][2]==uemail)
  • 感谢您的意见。在搜索和尝试解决方案之后,我终于设法操纵了 MWaheed 早些时候提供的解决方案(方法 2:使用 Array.prototype.findIndex())解决 StackOverFlow 中提出的问题,我们可以通过以下链接参考:-stackoverflow.com/questions/32565859/…I非常感谢这个方法 2,它不仅用 if-then-else 语句正确地给了我结果,而且搜索方法比通常建议的其他方法快得多。
  • 我希望分享我审核过的代码,但我不知道如何在此处执行此操作,因为这是我自 2014 年以来第二次发布问题。
  • ok @ziganotschka 抱歉,我还不熟悉这个平台。所以,我只是按照建议进行了更改。谢谢。

标签: javascript validation google-apps-script indexing match


【解决方案1】:

以下是我找到解决方案后查看的代码:-

function testslipupdate(){
var psheet=SpreadsheetApp.openById("1O2-xzPCjQO0cj_6LjehFnKmmTL519gXEpRYwRoEwIFA").getSheetByName("testslip");
var msheet=SpreadsheetApp.openById("1yLXRoV4MH6p_5F6rX3MnGnruDQVr4dqK-6GhRjRv3ns").getSheetByName("students");
var lrow = psheet.getLastRow();
var testID = psheet.getRange(lrow,2).getValue();
var uemail = psheet.getRange(lrow,3).getValue();
var slip = psheet.getRange(lrow,4).getValue();
var data = msheet.getDataRange().getValues();
var dtlen = data.length;

var qrow = data.findIndex(qID=> {return qID[0] == quoteID});  
var mrow = data.findIndex(mailID=> {return mailID[2] == uemail}); 

var mqrow=qrow+1;
var mmrow=mrow+1;

if(mqrow==0){
MailApp.sendEmail(""+uemail+","Record not found","","Please see Principal for a new registration.");
}
else if(mqrow!=0&&mmrow==0){
     MailApp.sendEmail(""+uemail+","Email address is not matched with Test ID","","Please change to valid email address");
     }else{
          msheet.getRange(mqrow,20).setValue(slip);
      }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    相关资源
    最近更新 更多