Суммирование значений из разных листов
У меня есть таблица в "Гугл таблицы". На ней несколько листов. На кадом таком листе, есть диапазон с числами, выстраенные в колонку. Как мне суммировать каждое первое число из первого листа, с каждым первым числом из последующих листов? Условно "Лист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 Примечание Выполнение завершено