• Как дописать скрипт Google Apps script?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    Получать данные по одной ячейке - это ооооооочень долго. Лучше взять все данные сразу в нужном диапазоне, например так:
    var data = ss.getActiveSheet().getRange("A3:A1000").getValues();

    И потом можно обращаться к этим данным по номеру строки и номеру столбца, не забывая что отсчёт идёт с нуля:
    data[row][column]
    Записывать тоже нужно массово. В итоге получится что-то такое:
    function onOpen() { 
      //Выполняется при открытии
      SpreadsheetApp
      .getUi()
      .createMenu('Меню')
      .addItem('Выполнить','doIt')
      .addToUi();
    };
    
    function doIt() {
      try{
        var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); //Текущий лист
        
        var data1 = ss.getRange("A3:E" + ss.getMaxRows()).getValues();
        var data2 = ss
        .getRange("m4:n" + ss.getMaxRows())
        .getValues()
        .filter(function(row) // Убираем пустые строки
                {
                  return row[0]!="";
                }
               );
        
        for (var row2=0;row2<data2.length;row2++){
          for (var row1=0;row1<data1.length;row1++){
            if (data1[row1][0]===data2[row2][0]){
              data1[row1][4]+=data2[row2][1];
              break; //Если значение найдено, дальше не ищем
            };
          };
        };
        
        ss.getRange("A3:E" + ss.getMaxRows()).setValues(data1); //Вывод данных
        SpreadsheetApp.getActive().toast("Готово!");
      }catch(e){ //Если вдруг ошибка
        Logger.log("Ошибка! " + e);
      };
    }

    Демо-таблица
    Ответ написан
    6 комментариев