Javascript 需要从谷歌应用程序脚本查询谷歌工作表中的特定数据

Javascript 需要从谷歌应用程序脚本查询谷歌工作表中的特定数据,javascript,html,google-apps-script,google-sheets,Javascript,Html,Google Apps Script,Google Sheets,我创建了一个web应用程序来跟踪我公司员工的工作时间,这个web应用程序很简单,它首先要求他们提供用户名和密码,然后允许他们注册进入时间和离开时间。我的老板还问我,是否有一种方法可以让员工看到他们最近的3次注册是什么,以防他们忘记记录出入境时间。因此,我需要做的是在接收数据的表单中查找每个员工的具体姓名/id,并在web应用程序的“上次注册”部分下打印这些数据 这里有一个最小的可重复的示例,它只要求输入一个名称,在数据库中查找该名称,然后允许您发送提交,同时带上提交的时间戳。我需要了解的是如何在

我创建了一个web应用程序来跟踪我公司员工的工作时间,这个web应用程序很简单,它首先要求他们提供用户名和密码,然后允许他们注册进入时间和离开时间。我的老板还问我,是否有一种方法可以让员工看到他们最近的3次注册是什么,以防他们忘记记录出入境时间。因此,我需要做的是在接收数据的表单中查找每个员工的具体姓名/id,并在web应用程序的“上次注册”部分下打印这些数据

这里有一个最小的可重复的示例,它只要求输入一个名称,在数据库中查找该名称,然后允许您发送提交,同时带上提交的时间戳。我需要了解的是如何在“ReceivedData”(来自web应用程序上的早期注册)数据库中查找此人的姓名,以及如何在“Last registrations”部分下将提交的时间戳带到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感谢您的回答。我看到了您的新问题并发布了答案。您能确认一下吗?如果这不是您期望的结果,我道歉。