选择下拉菜单中的名称时填写模板表

问题描述 投票:0回答:1

我已经创建了成绩报告Google电子表格,但是现在我正在寻找一种方法,用一个学生的成绩来填写模板报告表。我该如何实现?

在文件1中,我掌握了所有学生的成绩。在文件2中,我具有成绩报告的模板。如何在模板成绩报告中创建一个显示所有学生的下拉菜单,当我单击其中一个学生时,会自动填写成绩报告中的所有字段?我现在使用importrange函数将列中的数据导入模板,但是现在我需要为每个学生提供成绩报告文件。这实际上比为每个学生创建一个成绩报告文件要有效得多。

希望您能帮助我。

文件1:https://docs.google.com/spreadsheets/d/12M8W7fARJJZN90wM79U4x8RmcnZ08kFSDcZYnB26HB0/edit?usp=sharing

文件2:https://docs.google.com/spreadsheets/d/13-0qhCudC7EYRgOs2UpbJPRSq2nKoBiG2Md3-U8_U1Q/edit?usp=sharing

google-apps-script google-sheets drop-down-menu macros autofill
1个回答
0
投票
//add this function to an installable onOpen Trigger
function onOpenFunc() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Rapport');
  var slss=SpreadsheetApp.openById("12M8W7fARJJZN90wM79U4x8RmcnZ08kFSDcZYnB26HB0");
  var slsh=slss.getSheetByName("Rapportoversicht");
  var namerg=slsh.getRange(2,1,1,slsh.getLastColumn());
  var cell=sh.getRange(1,2);
  cell.clearDataValidations();
  var rule1=SpreadsheetApp.newDataValidation()
  .setAllowInvalid(false)
  .requireValueInRange(namerg)
  .build();
  cell.setDataValidation(rule1);
  var rule2=SpreadsheetApp.newDataValidation()
  .setAllowInvalid(false)
  .requireValueInList([1,2])
  .build();
  cell.offset(1,0).setDataValidation(rule2)
}

//This has to be an installable trigger
function onEditFunc(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!='Rapport')return;
  if(e.range.getColumn==5 && e.range.getRow()==1 && e.value && e.value!=e.oldValue ) {
    fillInStudentInformation(e.value,e.range.offset(1,0).getValue());  
  }
}

//I am not sure that this will always complete in 30 seconds
function fillinStudentInformation(student,semester) {
  var slss=SpreadsheetApp.openById("12M8W7fARJJZN90wM79U4x8RmcnZ08kFSDcZYnB26HB0");
  var slsh=slss.getSheetByName("Rapportoversicht");
  var hrg=slsh.getRange(2,2,1,slsh.getLastColumn()-1);
  var hA=nrg.getValues()[0];
  var hObj={};
  var lObj={};
  hA.forEach(function(name,i){hObj[name]=i+1;});//column number
  var grdRg=slsh.getRange(4,hObj[student],60,1);
  var lblRg=slsh.getRange(4,1,60,1);
  var grdA=grdRg.getValues();
  var lblA=lblRg.getValues();
  lblA.forEach(function(lbl,i){
    if(lbl && grdA[i]) {
      lObj[lbl]=grdA[i];
    }
  });
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Rapport');
  var rg1=sh.getRange(4,2,sh.getLastRow()-3,5);
  var vA=rg1.getValues();
  var rg2=sh.getRange(4,8,sh.getLastRow()-3,5);
  var vB=rg2.getValues();
  for(var i=0;i<vA.length;i++) {
    if(vA[i][0] && lObj.hasOwnProperty(vA[i][0])) {
      switch(semester) {
        case 1:
          sh.getRange(i+4,4).setValue(lObj[vA[i][0]]);
          break;
        case 2:
          sh.getRange(i+4,6).setValue(lObj[vA[i][0]]);
          break;
      }

    }
  }
  for(var i=0;i<vB.length;i++) {
    if(vB[i][0] && lObj.hasOwnProperty(vB[i][0])) {
      switch(semester) {
        case 1:
          sh.getRange(i+4,10).setValue(lObj[vB[i][0]]);
          break;
        case 2:
          sh.getRange(i+4,12).setValue(lObj[vB[i][0]]);
          break;
      }

    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.