Javascript 查找字符串";“用户输入”;在Google工作表中显示找到它的单元格

Javascript 查找字符串";“用户输入”;在Google工作表中显示找到它的单元格,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我不熟悉谷歌应用程序脚本和javascript,所以请原谅我的无知 我有一个谷歌表,其中包含了计算机的资产标签号列表。它还包含学生正在使用的笔记本电脑的用户名、全名和序列号 例如: 学生姓名用户名AssetTag序号 学生1用户名1 1002001####-##-#### 学生2用户名2 1002002####-##-#### 学生3用户名3 1002003####-##-#### 学生4用户名4 1002004####-##-#### 学生5用户名5 1002005####-##-#### 学

我不熟悉谷歌应用程序脚本和javascript,所以请原谅我的无知

我有一个谷歌表,其中包含了计算机的资产标签号列表。它还包含学生正在使用的笔记本电脑的用户名、全名和序列号

例如:

学生姓名用户名AssetTag序号

学生1用户名1 1002001####-##-####

学生2用户名2 1002002####-##-####

学生3用户名3 1002003####-##-####

学生4用户名4 1002004####-##-####

学生5用户名5 1002005####-##-####

学生6用户名6 1002006####-##-####

学生7用户名7 1002007####-##-####

学生8用户名8 1002008####-##-####

我需要能够让用户输入资产标签号,并让脚本返回它在其中找到该编号的单元格,理想情况下返回一个变量

计划是扫描输入资产标签的条形码,扫描后让它在谷歌表单上填写其余信息。因此,如果有人扫描1002001的条形码,它会为他们填写姓名、用户名和序列号字段。我希望我能找出其余的,但为了做到这一点,我需要包含资产编号的单元格

    function FindCell() {

  var ss = SpreadsheetApp.openById("0AmBYpL3aN9TZdDhZeGJnXzhRMkh2TkVTaHQtNnliSUE");
  var sheet = ss.getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();
  var cell = findCell();
  Logger.log(cell);
}
谢谢大家!


另外,我一直在这里阅读关于批处理脚本的答案,但现在我正在尝试谷歌品牌的javascript。这是我的第一篇帖子…

波特,你的思路是对的,但有一些问题。首先,您的函数名为FindCell(大写为F),它调用了一个名称非常相似的函数FindCell(小写为F),该函数在任何地方都没有显示

提供的脚本没有显示如何使用资产标记。您可能有一些函数获取它并将输入声明为变量。您需要将该变量传递给搜索匹配项的函数。上面的函数实际上不会搜索任何内容

这就是我要做的(用评论的语句来解释发生了什么):

function getScannedInput(){/*我正在模拟您可能拥有的获取扫描输入的函数
您将使用脚本在此处获取输入*/
var scannedInput=1002001//我对您给出的数字进行了硬编码,例如
var myInfo=FindCell(scannedInput);//您需要将扫描输入的值传递给函数
//返回此2D数组[[StudentName,userName,SN,cellAddress]]
var StudentName=myInfo[0][0];
var userName=myInfo[0][1];
var SN=myInfo[0][2];
var cellAddress=myInfo[0][3];//您现在可能不需要这个。
/*请记住,如果您仍然需要使用手机地址,您需要
在这个函数中也为ss和sheet设置变量*/
//*现在使用StudentName、userName和SN进行操作*
}
函数FindCell(scannedInput){//您需要将扫描输入的值传递给函数
var ss=SpreadsheetApp.openById(“1W3hkCk8foL7fQtmVkcU4ZP4eTbHT696cacR6a sSeDY”);
var sheet=ss.getActiveSheet();
var range=sheet.getDataRange();
var values=range.getValues();
var myInfo=[];//创建一个空数组,以便在找到信息时将其放入
var=false;

对于(var i=0;iThanks@Bonifacio2。我在我的原始问题中添加了一些代码。我刚刚开始使用javascript/google应用程序脚本,我可能有点不知所措。但是老板想要老板想要的东西。我毫不怀疑我能学会它,但我担心这将花费比他想要的更多的时间。哇!Th谢谢你!我将花一段时间来研究所有的语法,并试图找出它为什么会像你说的那样,但它看起来很棒!看起来正是我所需要的。非常感谢!你的代码让我比以前走得更远,但我还有一个问题(多个问题,但我想最好一次只回答一个问题)。关于这方面的政策是什么,我应该“回答我的问题”吗我的新问题将所有问题都保留在一个大问题中,我是否应该编辑我的原始问题;如果是,我是否也要保留原始问题,还是应该打开一个完整的新问题?我不想以错误的方式进行操作。再次感谢!而且,看起来myInfo数组中的信息实际上是嵌套的。不确定我是否说对了。如果我说对了e> var serialNumber=myInfo[0]
我得到一个username1################的响应。但是如果我这样做的话,
var serialNumber=myInfo[0][0]
我得到了##############的正确回答。我不确定为什么会这样,但我可以处理它。我想这可能是相关的,以防以后有人看到。不客气。鉴于评论中允许的字符数量有限,加上我的技能有限,全新的问题是你最好的选择:)如有必要,您可以链接回此数组。我甚至无法解释为什么myInfo在返回后会更改为2D数组。可能与值最初是2D数组有关,但在调试器中,myInfo在返回行之后才显示为单个数组。奇怪!我还应该说,我错误地假设SN代表StudentName not序列号-我在您的表格标题中没有发现SN。我将编辑我的答案。
function getScannedInput() { /*I'm simulating the function you probably have which gets the scanned input
  You'll have your script to get the input here*/

  var scannedInput = 1002001 //I hardcoded the number you gave just for example

  var myInfo = FindCell(scannedInput); // You need to pass the value of the scanned input to the function
                                       //returns this 2D array [[StudentName, userName, SN, cellAddress]]
  var StudentName = myInfo[0][0];
  var userName = myInfo[0][1];
  var SN = myInfo[0][2];
  var cellAddress = myInfo[0][3]; //You may not need this now.
  /*Bear in mind that if you still need to use the cellAddress you'll need to
    set variables for the ss and sheet in this function too.*/

//  * Now do stuff with StudentName, userName & SN *
}

function FindCell(scannedInput) { // You need to pass the value of the scanned input to the function
  var ss = SpreadsheetApp.openById("1W3hkCk8foL7fQtmVkcU4ZP4eTbHT696cacR6a-sSeDY");
  var sheet = ss.getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();
  var myInfo = []; //Create an empty array to put your info in when found
  var found = false;
  for (var i=0; i<values.length; ++i) { // Loops through each row
    for (var j=0; j<values[i].length; ++j) { // Loops through each column
      if (values[i][j] == scannedInput) { // Checks for match to scannedInput
        myInfo.push(values[i][0]);//Adds StudentName to the array
        myInfo.push(values[i][1]);//Add username to the array
        myInfo.push(values[i][3]);//Adds SN to the array
        myInfo.push(sheet.getRange(i, j).getA1Notation()); /*If you still need to return the cell address - 
        Do you still need to? (I think probably not.) Delete if you don't*/
        found = true;
        break; // Breaks out of the j loop
      }
    }
    if (found) {
      break;  // Breaks out of the i loop if found is true i.e. scannedInput was found
    }
  }
  return [myInfo]; /*returns this array [StudentName, userName, SN, cellAddress]
  or [StudentName, userName, SN] if you didn't need cellAddress above.*/
}