Google Sheets - Копирование и вставка данных на основе 2-х вещей: номер игры и имя - PullRequest
0 голосов
/ 23 января 2020

пытался найти способ копировать и вставлять данные на основе введенного номера игры и имени игрока. Чтобы разбить его, в игре всего 4 игрока, а ведение счета построено на основе шаблона на листе 1. Лист 2 представляет собой конгломерат из 16 различных игроков, в котором отображается номер и дата игры, с которой была проведена игра.

Вот где у меня проблемы. В шаблоне я, по сути, ввожу оценки вручную, а также номер игры. Я пытаюсь создать макрос, который после нажатия на него будет сканировать номер игры на листе 1 в виде строки и идентифицировать соответствующую ячейку на листе 2. Затем он будет копировать и вставлять дату. Затем сценарий распознает строку «Имя игрока» на листе 1 и скопирует и вставит соответствующие оценки на листе 2 в ту же строку, которая ранее была идентифицирована по номеру игры. Это действительно сложно, потому что нужно избегать вставки в колонке 12 из 16 игроков.

1 Ответ

0 голосов
/ 23 января 2020

Эта функция собирает баллы на первом листе и распределяет их по правильным строкам на основе номера игры и правильных столбцов на основе строк заголовков, которые коррелируют с игроками.

Обратите внимание, что вы не можете запустить эта функция из редактора сценариев, так как для нее требуется объект события 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:

enter image description here

Лист2:

enter image description here

Анимация:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...