Google sheet 来自 sheet 错误的网络应用程序搜索数据

Google sheet web app search data from sheet error

I  want to search data from google sheet and show it in form  by web app.

PAN 是唯一的 5 位数字。当我们输入 PAN,5 位数字到(PAN)输入表单并单击更新按钮时,它应该在 sheet 中搜索 PAN 的数据,如果匹配则将整行带到网络表单,否则显示不可用。

当我们输入 PAN 编号并单击更新按钮时,它在表格中显示错误数据。 但是当我们通过 Logger.log() 检查它时,它显示正确的数据。

我不知道并弄清楚为什么当我们点击更新按钮时它在网络表单中显示错误的数据,请帮助我并让我知道这个问题的原因

function doGet(e)
{
  return HtmlService.createHtmlOutputFromFile("page");
}




 function searchData(pan)
    {
      var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
      //var nameList=ss.getRange("A1:A").getValues().flat();
      //var panList=ss.getRange("B1:B").getValues().flat();
      //var aadharList=ss.getRange("c1:c").getValues().flat();
      //var emailList=ss.getRange("d1:d").getValues().flat();
      //var phnList=ss.getRange("e1:e").getValues().flat();
    
      var data=ss.getRange(1,1,ss.getLastRow(),5).getValues();
    
      var panList=data.map(function(r){return r[1];});
      var nameList=data.map(function(r){return r[0];});
      var aadharList=data.map(function(r){return r[2];});`enter code here`
      var emailList=data.map(function(r){return r[3];});
      var phnList=data.map(function(r){return r[4];});
    
      var index=panList.indexOf((pan));
      if(index>-1)
      {
      var name=nameList[index];
      var aadhar=aadharList[index];
      var email=emailList[index];
      var phone=phnList[index];
      return [name,pan,aadhar,email,phone]
      }
      else
      { return "unavailable"}
      
    }
    
    Logger.log(searchData(66666))


//html file..(page.html)
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <h1> Web App </h1>

    <label> Name </label>
    <input type="text" id="username">

    <label> PAN</label>
    <input type="number" id="userpan">

    <label> Aadhar </label>
    <input type="number" id="useraadhar">

    <label> Email </label>
    <input type="text" id="useremail">

    <label> Telepnoe </label>
    <input type="text" id="userphone">

    <button id="btn"> Update </button>

    <script>

      //document.getElementById("userpan").addEventListener("input",search);
      document.getElementById("btn").addEventListener("click",search);

      function search()
      {
        var pan=document.getElementById("userpan").value;
        if(pan.length==5)
        {
        google.script.run.withSuccessHandler(test).searchData(pan);

        function test(s)
        {
          document.getElementById("username").value=s[0];
          document.getElementById("userpan").value=pan;
          document.getElementById("useraadhar").value=s[2];
          document.getElementById("useremail").value=s[3];
          document.getElementById("userphone").value=s[4];
        }  
        }     
      }
    </script>
  </body>
</html>

But when we check it by Logger.log() , it show right data .和你的显示脚本来看,我认为你的问题的原因可能是由于panList的值是数字而var pan=document.getElementById("userpan").value是字符串。在这种情况下,即使输入标签的输入值是数字66666var pan=document.getElementById("userpan").value的值也是字符串。这样,var index=panList.indexOf((pan)); 总是 -1.

如果您的脚本只是简单修改,请修改如下。

发件人:

var data=ss.getRange(1,1,ss.getLastRow(),5).getValues();

收件人:

var data = ss.getRange(1, 1, ss.getLastRow(), 5).getDisplayValues();
  • 由此,当 66666pan,即字符串,从 Javascript 发送到 Google Apps 脚本时,data 被检索getDisplayValues() 是字符串。这样,var index=panList.indexOf((pan));就可以工作了。

注:

  • 我认为您的 Google Apps 脚本可能能够降低流程成本,如下所示。

      function searchData(pan) {
        var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
        var range = sheet.getRange("B1:B" + sheet.getLastRow()).createTextFinder(pan).matchEntireCell(true).findNext();
        if (range) {
          return sheet.getRange(range.getRow(), 1, 1, 5).getValues()[0];
        }
        return "unavailable";
      }
    

注:

参考文献: