Javascript 需要从谷歌应用程序脚本查询谷歌工作表中的特定数据
我创建了一个web应用程序来跟踪我公司员工的工作时间,这个web应用程序很简单,它首先要求他们提供用户名和密码,然后允许他们注册进入时间和离开时间。我的老板还问我,是否有一种方法可以让员工看到他们最近的3次注册是什么,以防他们忘记记录出入境时间。因此,我需要做的是在接收数据的表单中查找每个员工的具体姓名/id,并在web应用程序的“上次注册”部分下打印这些数据 这里有一个最小的可重复的示例,它只要求输入一个名称,在数据库中查找该名称,然后允许您发送提交,同时带上提交的时间戳。我需要了解的是如何在“ReceivedData”(来自web应用程序上的早期注册)数据库中查找此人的姓名,以及如何在“Last registrations”部分下将提交的时间戳带到web应用程序。这里还有一个电子表格,其中包含一些数据,您可以在其中工作。 () 很抱歉这么长的描述,谢谢Javascript 需要从谷歌应用程序脚本查询谷歌工作表中的特定数据,javascript,html,google-apps-script,google-sheets,Javascript,Html,Google Apps Script,Google Sheets,我创建了一个web应用程序来跟踪我公司员工的工作时间,这个web应用程序很简单,它首先要求他们提供用户名和密码,然后允许他们注册进入时间和离开时间。我的老板还问我,是否有一种方法可以让员工看到他们最近的3次注册是什么,以防他们忘记记录出入境时间。因此,我需要做的是在接收数据的表单中查找每个员工的具体姓名/id,并在web应用程序的“上次注册”部分下打印这些数据 这里有一个最小的可重复的示例,它只要求输入一个名称,在数据库中查找该名称,然后允许您发送提交,同时带上提交的时间戳。我需要了解的是如何在
var name=”“;
函数doGet(e){
返回HtmlService.createhtmloutpfromfile('Form');
}
函数AddRecord(名称){
//获取电子表格详细信息
var url='1〕https://docs.google.com/spreadsheets/d/1CJoPuq3sHE5L31GwlvS4Zygm1sL3M0HGC7MgW3rCq3g/edit#gid=0';
//粘贴谷歌表单的URL
var ss1=SpreadsheetApp.openByUrl(url);
var webAppSheet1=ss1.getActiveSheet();
const Lrow=webAppSheet1.getLastRow();
常量数据=[名称,新日期()];
webAppSheet1.getRange(Lrow+1,1,1,data.length).设置值([data])
}
函数checkLogin(名称){
var url='1〕https://docs.google.com/spreadsheets/d/1CJoPuq3sHE5L31GwlvS4Zygm1sL3M0HGC7MgW3rCq3g/edit#gid=0';
//粘贴谷歌表单的URL
var ss2=SpreadsheetApp.openByUrl(url);
var webAppSheet2=ss2.getSheetByName(“数据库”);
var getLastRow=webAppSheet2.getLastRow();
var发现_记录=“”;
对于(var i=1;i我相信您的目标如下
function checkLogin(Name) {
var url = 'https://docs.google.com/spreadsheets/d/1CJoPuq3sHE5L31GwlvS4Zygm1sL3M0HGC7MgW3rCq3g/edit#gid=0'; //Paste URL of GOOGLE SHEET
var ss2= SpreadsheetApp.openByUrl(url);
var webAppSheet2 = ss2.getSheetByName("DataBase");
var check = webAppSheet2.getRange(2, 1, webAppSheet2.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findNext();
var obj = {check: check ? 'TRUE' : 'FALSE'};
var sheet = ss2.getSheetByName("ReceivedData");
var ranges = sheet.getRange(2, 1, sheet.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findAll();
if (ranges.length > 0) {
obj.lastTimestamp = ranges.pop().offset(0, 1, 1, 1).getDisplayValue();
return obj;
}
return obj;
}
function LoginUser() {
var Name = document.getElementById("Name").value;
google.script.run.withSuccessHandler(function({check, lastTimestamp}) {
if(check == 'TRUE') {
document.getElementById("loginDisplay").style.display = "none";
document.getElementById("dataDisplay").style.display = "block";
document.getElementById("lastTimestamp").innerHTML = lastTimestamp;
} else if(check == 'FALSE') {
document.getElementById("errorMessage").innerHTML = "Name not found";
}
}).checkLogin(Name);
}
- 从
中,我需要做的是在接收数据的工作表中查找每个员工的具体姓名/id,并在web应用程序的“上次注册”部分下打印这些数据。
和我需要看到的是如何在“ReceivedData”的数据库中查找该人员的姓名(来自web应用程序上的早期注册)以及如何在“上次注册”部分下将提交的时间戳带到web应用程序中。
,我理解您的问题如下
function checkLogin(Name) {
var url = 'https://docs.google.com/spreadsheets/d/1CJoPuq3sHE5L31GwlvS4Zygm1sL3M0HGC7MgW3rCq3g/edit#gid=0'; //Paste URL of GOOGLE SHEET
var ss2= SpreadsheetApp.openByUrl(url);
var webAppSheet2 = ss2.getSheetByName("DataBase");
var check = webAppSheet2.getRange(2, 1, webAppSheet2.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findNext();
var obj = {check: check ? 'TRUE' : 'FALSE'};
var sheet = ss2.getSheetByName("ReceivedData");
var ranges = sheet.getRange(2, 1, sheet.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findAll();
if (ranges.length > 0) {
obj.lastTimestamp = ranges.pop().offset(0, 1, 1, 1).getDisplayValue();
return obj;
}
return obj;
}
function LoginUser() {
var Name = document.getElementById("Name").value;
google.script.run.withSuccessHandler(function({check, lastTimestamp}) {
if(check == 'TRUE') {
document.getElementById("loginDisplay").style.display = "none";
document.getElementById("dataDisplay").style.display = "block";
document.getElementById("lastTimestamp").innerHTML = lastTimestamp;
} else if(check == 'FALSE') {
document.getElementById("errorMessage").innerHTML = "Name not found";
}
}).checkLogin(Name);
}
- 您需要从电子表格中的
ReceivedData
工作表中搜索输入值
- 您希望将通过搜索工作表中的输入值检索到的最后一个时间戳放在“last Registrations section”的下方
修改点:
- 从您的脚本中,我认为当用于搜索输入值的脚本包含在GAS-side的函数
checkLogin
中时,它可能是合适的
- 并且,为了显示最后一个时间戳,
被添加到HTML中,Javascript中的登录用户
被修改
当上述各点反映到脚本中时,它将变成如下所示
function checkLogin(Name) {
var url = 'https://docs.google.com/spreadsheets/d/1CJoPuq3sHE5L31GwlvS4Zygm1sL3M0HGC7MgW3rCq3g/edit#gid=0'; //Paste URL of GOOGLE SHEET
var ss2= SpreadsheetApp.openByUrl(url);
var webAppSheet2 = ss2.getSheetByName("DataBase");
var check = webAppSheet2.getRange(2, 1, webAppSheet2.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findNext();
var obj = {check: check ? 'TRUE' : 'FALSE'};
var sheet = ss2.getSheetByName("ReceivedData");
var ranges = sheet.getRange(2, 1, sheet.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findAll();
if (ranges.length > 0) {
obj.lastTimestamp = ranges.pop().offset(0, 1, 1, 1).getDisplayValue();
return obj;
}
return obj;
}
function LoginUser() {
var Name = document.getElementById("Name").value;
google.script.run.withSuccessHandler(function({check, lastTimestamp}) {
if(check == 'TRUE') {
document.getElementById("loginDisplay").style.display = "none";
document.getElementById("dataDisplay").style.display = "block";
document.getElementById("lastTimestamp").innerHTML = lastTimestamp;
} else if(check == 'FALSE') {
document.getElementById("errorMessage").innerHTML = "Name not found";
}
}).checkLogin(Name);
}
修改脚本:
谷歌应用程序脚本端:
请修改checkLogin
,如下所示
function checkLogin(Name) {
var url = 'https://docs.google.com/spreadsheets/d/1CJoPuq3sHE5L31GwlvS4Zygm1sL3M0HGC7MgW3rCq3g/edit#gid=0'; //Paste URL of GOOGLE SHEET
var ss2= SpreadsheetApp.openByUrl(url);
var webAppSheet2 = ss2.getSheetByName("DataBase");
var check = webAppSheet2.getRange(2, 1, webAppSheet2.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findNext();
var obj = {check: check ? 'TRUE' : 'FALSE'};
var sheet = ss2.getSheetByName("ReceivedData");
var ranges = sheet.getRange(2, 1, sheet.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findAll();
if (ranges.length > 0) {
obj.lastTimestamp = ranges.pop().offset(0, 1, 1, 1).getDisplayValue();
return obj;
}
return obj;
}
function LoginUser() {
var Name = document.getElementById("Name").value;
google.script.run.withSuccessHandler(function({check, lastTimestamp}) {
if(check == 'TRUE') {
document.getElementById("loginDisplay").style.display = "none";
document.getElementById("dataDisplay").style.display = "block";
document.getElementById("lastTimestamp").innerHTML = lastTimestamp;
} else if(check == 'FALSE') {
document.getElementById("errorMessage").innerHTML = "Name not found";
}
}).checkLogin(Name);
}
HTML和Javascript端:
请修改登录用户
,如下所示
function checkLogin(Name) {
var url = 'https://docs.google.com/spreadsheets/d/1CJoPuq3sHE5L31GwlvS4Zygm1sL3M0HGC7MgW3rCq3g/edit#gid=0'; //Paste URL of GOOGLE SHEET
var ss2= SpreadsheetApp.openByUrl(url);
var webAppSheet2 = ss2.getSheetByName("DataBase");
var check = webAppSheet2.getRange(2, 1, webAppSheet2.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findNext();
var obj = {check: check ? 'TRUE' : 'FALSE'};
var sheet = ss2.getSheetByName("ReceivedData");
var ranges = sheet.getRange(2, 1, sheet.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findAll();
if (ranges.length > 0) {
obj.lastTimestamp = ranges.pop().offset(0, 1, 1, 1).getDisplayValue();
return obj;
}
return obj;
}
function LoginUser() {
var Name = document.getElementById("Name").value;
google.script.run.withSuccessHandler(function({check, lastTimestamp}) {
if(check == 'TRUE') {
document.getElementById("loginDisplay").style.display = "none";
document.getElementById("dataDisplay").style.display = "block";
document.getElementById("lastTimestamp").innerHTML = lastTimestamp;
} else if(check == 'FALSE') {
document.getElementById("errorMessage").innerHTML = "Name not found";
}
}).checkLogin(Name);
}
并且,请添加如下HTML
function checkLogin(Name) {
var url = 'https://docs.google.com/spreadsheets/d/1CJoPuq3sHE5L31GwlvS4Zygm1sL3M0HGC7MgW3rCq3g/edit#gid=0'; //Paste URL of GOOGLE SHEET
var ss2= SpreadsheetApp.openByUrl(url);
var webAppSheet2 = ss2.getSheetByName("DataBase");
var check = webAppSheet2.getRange(2, 1, webAppSheet2.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findNext();
var obj = {check: check ? 'TRUE' : 'FALSE'};
var sheet = ss2.getSheetByName("ReceivedData");
var ranges = sheet.getRange(2, 1, sheet.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findAll();
if (ranges.length > 0) {
obj.lastTimestamp = ranges.pop().offset(0, 1, 1, 1).getDisplayValue();
return obj;
}
return obj;
}
function LoginUser() {
var Name = document.getElementById("Name").value;
google.script.run.withSuccessHandler(function({check, lastTimestamp}) {
if(check == 'TRUE') {
document.getElementById("loginDisplay").style.display = "none";
document.getElementById("dataDisplay").style.display = "block";
document.getElementById("lastTimestamp").innerHTML = lastTimestamp;
} else if(check == 'FALSE') {
document.getElementById("errorMessage").innerHTML = "Name not found";
}
}).checkLogin(Name);
}
发件人:
上次注册
发送
致:
上次注册
发送
注:
- 在此修改后的脚本中,将使用共享的电子表格和脚本。因此,当电子表格的结构发生更改时,该脚本可能无法使用。请小心此操作
参考:
您需要在您的链接上提供公共访问权限抱歉,我忘记了。谢谢,它似乎工作得很好!但您知道我如何调整此设置以检查用户名和密码(并确保两者一致),而不仅仅是一个名字?@Sebastian Carrasco感谢您的回复。我很高兴您的问题得到解决。我愿意支持您。不幸的是,我无法清楚了解您的新问题,这与您的问题不同。我对此表示歉意。因此,您能通过包含详细信息将其作为新问题发布吗?因为当y我们最初的问题被评论改变了,看到你的问题的其他用户感到困惑。通过将它作为新问题发布,包括我在内的用户可以想到它。如果你能合作解决你的新问题,我很高兴。你能合作解决你的新问题吗?这是我添加的新问题的链接。我认为解决方案类似于这是一个问题,但唯一的区别是“CheckLogin”不是在“数据库”表中查找员工的姓名函数还必须搜索密码,并确保密码与员工姓名匹配。@Sebastian Carrasco感谢您的回答。我看到了您的新问题并发布了答案。您能确认一下吗?如果这不是您期望的结果,我道歉。