Суммирование значений из разных листов

У меня есть таблица в "Гугл таблицы". На ней несколько листов. На кадом таком листе, есть диапазон с числами, выстраенные в колонку. Как мне суммировать каждое первое число из первого листа, с каждым первым числом из последующих листов? Условно "Лист1" колонка "А1" строка 1 + "Лист2" колонка "А1" строка 1 + "Лист3" колонка "А1" строка 1 + ..., а после так же суммировать "Лист1" колонка "А1" строка 2 + "Лист2" колонка "А1" строка 2 + "Лист3" колонка "А1" строка 2 + ...

Я перебрал практически все, что я знаю, варианты. но он мне суммирует все числа со всех листов. Прошу, подскажите. Мучаюсь с этим уже неделю.

function myFunction() {
    var sheet = SpreadsheetApp.getActiveSpreadsheet();
    var activeSheet = sheet.getSheets();
    var sum = 0;
    for(var i = 0; i < activeSheet.length; i++) {
        var list = activeSheet[i];
        var range = list.getRange('A1:A10');
        var value = range.getValues();
        for(var j = 0; j < value.length; j++) {
            if(value[j][0] !== "") { 
                sum += value[j][0];
                Logger.log(sum);
            }
        }
}

Ответы (2 шт):

Автор решения: Анна Митрофанова

Пропущена одна закрывающая скобка.

Обратите внимание на то, что лежит в value. Там массив из одной колонки. Задавать выбор из него двумя символами не нужно. Оставьте только j.

Также данные собраны с типом строка, нужно чтобы было число.

Порядок перебора i и j перепутаны, если вы хотите, чтобы сначала складывались первые числа всех листов, потом вторые и т.д., то нужно перебор по ячейкам вывести выше, чем перебор по листам (или, другими словами, вложить перебор листов внутрь перебора по ячейкам).

И последнее, не обязательно, но чуть удобнее: отдельно value выводить не обязательно, можно было сразу getValues() вписать после getRange('A1:A10').

function myFunction() {
    var sheet = SpreadsheetApp.getActiveSpreadsheet();
    var activeSheet = sheet.getSheets();
    var sum = 0;
    for(var i = 0; i < activeSheet.length; i++) {
        var list = activeSheet[i];
        var range = list.getRange('A1:A10');
        var value = range.getValues();
        for(var j = 0; j < value.length; j++) {
            if(value[j] !== "") { 
                sum += Number(value[j]);
                Logger.log(sum);
            }
        }
    }
}
→ Ссылка
Автор решения: Алексей Р

Небольшое дополнение к вашему коду - собираем суммы в объект (словарь), где ключи - индексы ячейки 0..n внутри диапазона, а значения - суммы значений ячеек с этими индексами.

function myFunction() {
    var sheet = SpreadsheetApp.getActiveSpreadsheet();
    var activeSheet = sheet.getSheets();
    
    var sum = {}
    for(var i = 0; i < activeSheet.length; i++) {
        var list = activeSheet[i];
        var range = list.getRange('A1:A10');
        var value = range.getValues();
        for(var j = 0; j < value.length; j++) {
            if(value[j][0] !== "") { 
                if (sum[j]===undefined) sum[j]=value[j][0]
                  else
                sum[j] += value[j][0]
            }
        }
  }
  sum = Object.values(sum)
  Logger.log(sum);
}

Данные на листах

Массив value выглядит так: [[10], [20], [],[]] - это значения с первого листа; [[30],[40],[],[]] - значения второго, [[50],[60],[],[]] - значения третьего и т.д.

Результат

18:27:59    Примечание  Выполнение начато
18:27:59    Информация  [90.0, 120.0]
18:28:00    Примечание  Выполнение завершено
→ Ссылка