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
是字符串。在这种情况下,即使输入标签的输入值是数字66666
,var 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();
- 由此,当
66666
的 pan
,即字符串,从 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";
}
注:
当您修改 Google Apps 脚本时,请将部署修改为新版本。这样,修改后的脚本就会反映在 Web Apps 中。请注意这一点。
您可以在“Redeploying Web Apps without Changing URL of Web Apps for new IDE”的报告中看到详细信息。
参考文献:
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
是字符串。在这种情况下,即使输入标签的输入值是数字66666
,var 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();
- 由此,当
66666
的pan
,即字符串,从 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"; }
注:
当您修改 Google Apps 脚本时,请将部署修改为新版本。这样,修改后的脚本就会反映在 Web Apps 中。请注意这一点。
您可以在“Redeploying Web Apps without Changing URL of Web Apps for new IDE”的报告中看到详细信息。