@ZorX

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

Ребятушки, привет!
Помогите написать скрипт.
Я не программист не разу, но покурив гугл, у меня получилось сделать такое
function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var code1 = ss.getActiveSheet().getRange("A3").getValue();
  var code2 = ss.getActiveSheet().getRange("M4").getValue();
  var value1 = ss.getActiveSheet().getRange("E3").getValue();
  var value2 = ss.getActiveSheet().getRange("N4").getValue();
  
   if (code1==code2){
    var sum = value1 + value2;
     var rr = ss.getActiveSheet().getRange("E3").setValue(sum);
  }
   
 
}


Все что здесь написано, сделано для одной ячейки.
Оно проверяет ячейку M4, если эта ячейка совпадает с А3 то выполняет суммирование E3 и N4
A3 - это код товара в таблице
M4 - это код товара который я ввожу руками
Е3 - количество товара на складе
N4 - количество товара которое пришло и его я ввожу руками.

Собственно, как я сказал выше, это все работает с одной ячейкой.
Но мне нужно, что бы оно работало для каждой ячейки отдельно. К примеру я ввожу код "2345" оно находило эту ячейку, к примеру это будет А45 и после того как оно ее нашло, но Е45 вносило сумму Е45 и N4.
  • Вопрос задан
  • 1046 просмотров
Решения вопроса 1
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);
  };
}

Демо-таблица
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы