Вы можете использовать следующий код:
var LIST_WITH_GRADES_ID = 'YOUR_ID';
var LIST_WITH_GRADES_STUDENTS_A1 = 'Rapportoverzicht!B2:Y2';
function onOpenSpreadsheet(e) {
var students = SpreadsheetApp.openById(LIST_WITH_GRADES_ID).getRange(LIST_WITH_GRADES_STUDENTS_A1).getValues()[0];
var rangeRule = SpreadsheetApp.newDataValidation().requireValueInList(students).setAllowInvalid(false);
SpreadsheetApp.getActive().getRange('Rapport!E1').setDataValidation(rangeRule);
}
function onEditSpreadsheet(e) {
var rapportSheet = SpreadsheetApp.getActive().getSheetByName('Rapport');
if (e.range.getA1Notation() == 'E1' && e.range.getSheet().getName() == 'Rapport') {
var studentCol = findStudentCol(e.range.getValue());
copyStudentGrades(studentCol);
}
}
/* Returns 1-indexed student column */
function findStudentCol(student) {
var sheet = SpreadsheetApp.openById(LIST_WITH_GRADES_ID);
var studentsRange = SpreadsheetApp.openById(LIST_WITH_GRADES_ID).getRange(LIST_WITH_GRADES_STUDENTS_A1);
for (var col=1; col<=studentsRange.getWidth(); col++) {
if (studentsRange.getCell(1, col).getValue() == student)
return col + studentsRange.getColumn() - 1;
}
}
function copyStudentGrades(studentCol) {
var gradesSheet = SpreadsheetApp.openById(LIST_WITH_GRADES_ID).getSheetByName('Rapportoverzicht');
var templateSheet = SpreadsheetApp.getActive().getSheetByName('Rapport');
templateSheet.getRange(4, 4, 30, 1).setValues(
gradesSheet.getRange(4, studentCol, 30, 1).getValues());
templateSheet.getRange(4, 10, 25, 1).setValues(
gradesSheet.getRange(36, studentCol, 25, 1).getValues());
}
Вам нужно будет поставить идентификатор своей оценочной ведомости в первой строке и добавить этот скрипт в редактор вашего "шаблона" листа. Вам также нужно будет установить onOpenSpreadsheet
и onEditSpreadsheet
как устанавливаемые триггеры, чтобы заставить его работать (см. управление триггерами вручную ).
Редактировать
Длячтобы использовать два разных файла оценок и импортировать замечания, вы можете использовать следующую правку предыдущего кода:
var LIST_WITH_GRADES_ID = 'YOUR_LIST_WITH_GRADES_1_ID';
var LIST_WITH_GRADES_2_ID = 'YOUR_LIST_WITH_GRADES_2_ID';
var LIST_WITH_GRADES_STUDENTS_A1 = 'Rapportoverzicht!B2:AG2';
var NSTUDENTS = 24; // Number of students
function onOpenSpreadsheet(e) {
var students = SpreadsheetApp.openById(LIST_WITH_GRADES_ID).getRange(LIST_WITH_GRADES_STUDENTS_A1).getValues()[0];
var rangeRule = SpreadsheetApp.newDataValidation().requireValueInList(students).setAllowInvalid(false);
SpreadsheetApp.getActive().getRange('Rapport!E1').setDataValidation(rangeRule);
}
function onEditSpreadsheet(e) {
var currentStudent = e.range.getValue();
var rapportSheet = SpreadsheetApp.getActive().getSheetByName('Rapport');
if (e.range.getA1Notation() == 'E1' && e.range.getSheet().getName() == 'Rapport') {
var studentCol = findStudentCol(currentStudent);
copyStudentGrades(studentCol);
importRemarks(currentStudent);
}
}
/* Returns 1-indexed student column */
function findStudentCol(student) {
var sheet = SpreadsheetApp.openById(LIST_WITH_GRADES_ID);
var studentsRange = SpreadsheetApp.openById(LIST_WITH_GRADES_ID).getRange(LIST_WITH_GRADES_STUDENTS_A1);
for (var col=1; col<=studentsRange.getWidth(); col++) {
if (studentsRange.getCell(1, col).getValue() == student)
return col + studentsRange.getColumn() - 1;
}
}
function copyStudentGrades(studentCol) {
var gradesSheet = SpreadsheetApp.openById(LIST_WITH_GRADES_ID).getSheetByName('Rapportoverzicht');
var gradesSheet2 = SpreadsheetApp.openById(LIST_WITH_GRADES_2_ID).getSheetByName('Rapportoverzicht');
var templateSheet = SpreadsheetApp.getActive().getSheetByName('Rapport');
templateSheet.getRange(4, 4, 30, 1).setValues(
gradesSheet.getRange(4, studentCol, 30, 1).getValues());
templateSheet.getRange(4, 10, 25, 1).setValues(
gradesSheet.getRange(36, studentCol, 25, 1).getValues());
templateSheet.getRange(4, 6, 30, 1).setValues(
gradesSheet2.getRange(4, studentCol, 30, 1).getValues());
templateSheet.getRange(4, 12, 25, 1).setValues(
gradesSheet2.getRange(36, studentCol, 25, 1).getValues());
}
function importRemarks(student) {
var remarksSheet = SpreadsheetApp.openById(LIST_WITH_GRADES_ID).getSheetByName('opmerkingen rapport');
var remarksSheet2 = SpreadsheetApp.openById(LIST_WITH_GRADES_2_ID).getSheetByName('opmerkingen rapport');
var templateSheet = SpreadsheetApp.getActive().getSheetByName('Opmerkingen');
var studentRow;
for (var i=2; i<(2+NSTUDENTS); i++) {
if (remarksSheet.getRange(i, 1).getValue() == student) {
studentRow = i;
break;
}
}
templateSheet.getRange('B5').setValue(remarksSheet.getRange(studentRow, 2).getValue());
templateSheet.getRange('B11').setValue(remarksSheet2.getRange(studentRow, 2).getValue());
}