我已经创建了成绩报告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
//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;
}
}
}
}