如果两个范围之间有一个公共值,则显示该值

时间:2019-02-20 08:49:36

标签: google-apps-script google-sheets

我有一个Google表格,可以用作学校内摄像设备的简单签入/签出系统。

每个学生都佩戴一张ID卡,该ID卡在扫描时会返回BASKET范围内的唯一编号(A2:A20)。 ID号如下:16-293914

当我将学生证卡扫描到篮子中时,我希望脚本从list of Students(W22:W166)查找该编号,并将与ID编号匹配的学生姓名返回到NAME单元​​格(D3 )。

例如:
号码被扫描到购物篮中。
如果StudentID中有一个公共值。
将学生的名字+姓氏返回到单元格E3。
运行checkOut()函数。
如果不匹配:什么也不做。

这是我的脚本,有人知道我在做什么错吗?

//student name auto fill
function onEdit(e) {
  var basket = sheet.getRange('A2:A20').getValues();
  var name = sheet.getRange("D3").getValue();
  var studentID = sheet.getRange('W22:W166').getValues();
  var firstName = sheet.getRange('Y22:Y166').getValues();
  var lastName = sheet.getRange('X22:X166').getValues();
  for(var i=0;i<studentID.length;i++) {
    for(var j=0;j<basket.length;j++) {
      if(studentName[i][0]==basket[j][0]){
        name[i][0]= firstName + lastName;
      }
    }
  }
  checkOut()
}

1 个答案:

答案 0 :(得分:1)

这是我想出的。

function onEdit(e) {
  //Not sure where your 'sheet' variable comes from. If it's global you will want to remove this next line.
  var sheet = e.source.getActiveSheet(); //OR e.source.getSheetByName("<YOUR SHEET NAME>");

  var basket = sheet.getRange('A2:A20').getValues();
  var name = sheet.getRange("D3");
  var studentID = sheet.getRange('W22:W166').getValues();

  // These are kind of wasteful, lets wait to pull just the first and last name we need.
  //var firstName = sheet.getRange('Y22:Y166').getValues();
  //var lastName = sheet.getRange('X22:X166').getValues();

  var flag = false; //Flag lets us know later if match was found.
  for(var i=0;i<studentID.length;i++) {
    for(var j=0;j<basket.length;j++) {
      if(studentID[i][0] !== "" && basket[j][0] !== "" && studentID[i][0]==basket[j][0]){
        var sName = sheet.getRange("X"+(22+i)+":Y"+(22+i)).getValues(); //Now get the name... This is a bit weird, but it works. Normally I'd use other getRange() params.
        name.setValue(sName[0][1] + " " + sName[0][0]); //Set cell D3 to firstname lastname.
        flag = true;
      }
    }
  }
  if(flag) checkOut(); //Only run if match found.
}