Эта функция собирает баллы на первом листе и распределяет их по правильным строкам на основе номера игры и правильных столбцов на основе строк заголовков, которые коррелируют с игроками.
Обратите внимание, что вы не можете запустить эта функция из редактора сценариев, так как для нее требуется объект события onEdit. Скопируйте его в редактор сценариев, убедитесь, что имена листов правильные, и добавьте флажок к Sheet1 I1, и если вы используете sh, вы можете использовать раскрывающийся список данных для выбора номеров игр ... это ваше дело.
function onEdit(e) {
e.source.toast('Entry')
var sh=e.range.getSheet();
if(sh.getName()=='Sheet1' && e.range.columnStart==9 && e.range.rowStart==1 ) {
e.source.toast('Flag1');
e.range.setValue('FALSE');//reset switch
var hdrToVal={}; //hdr to value from sheet1
var valueA=sh.getRange(5,2,1,4).getValues()[0];
var hdrA=sh.getRange(1,2,1,4).getValues()[0];
hdrA.forEach(function(hdr,i){hdrToVal[hdr]=valueA[i];});
var sh2=e.source.getSheetByName('Sheet2');
var game=sh.getRange(1,8).getValue();//game number used to get row on sheet2
var hA=sh2.getRange(1,3,1,sh2.getLastColumn()).getValues()[0];
var hdrToCol={};//header to columns
var hdrToIdx={};//header to vA index
hA.forEach(function(hdr,i){hdrToCol[hdr]=i+3;hdrToIdx[hdr]=i;});
var vA=sh2.getRange(3,1,sh2.getLastRow()-2,sh2.getLastColumn()).getValues();
for(var i=0;i<vA.length;i++) {
if(vA[i][0]==game) {
var row=i+3;//got the row now
break;
}
}
for(var i=0;i<hA.length;i++) {
if(hdrToVal.hasOwnProperty(hA[i])) {
sh2.getRange(row,hdrToCol[hA[i]]).setValue(hdrToVal[hA[i]]);//everything comes together here.
}
}
}
}
Лист1:
Лист2:
Анимация: