Суммировать ячейки из выбранных листов в книге Google Sheets - PullRequest
0 голосов
/ 18 января 2020

Я создал рабочую книгу для отслеживания перемещений между магазинами. Есть страницы на каждый день месяца. Я хочу сделать итоговую страницу, чтобы подсчитать общие переводы на отдельном листе. (В книге есть другие страницы, которые я не хочу добавлять к общему итогу.)

Я пытаюсь создать сценарий, который будет принимать значение ячейки A1 на листах с 1 по 31 и помещать сумму в лист 32 в ячейке A1 и аналогично для каждой другой ячейки.

Сейчас я использую надстройку листов Google, которая называется «Пользовательский счет и сумма», которая позволяет мне складывать все страницы вместе, как я хочу, но Имена страниц передаются в виде строк, поэтому вы не можете скопировать и вставить формулу в ячейки. Я нашел обходной путь для этого, используя address (row (), column (), 4, true) для ссылки на положение ячейки, поэтому мне не нужно вручную вводить каждую ячейку. Теперь я пытаюсь сделать так, чтобы значения будет обновлять без меня, чтобы повторно ввести формулу. Я не могу сделать это, используя функцию надстройки, которую я установил, потому что, насколько я могу судить, мне нужно передать другой аргумент, но я не могу сделать это в формуле надстройки. Я пытаюсь написать свой собственный сценарий, и я пытался использовать информацию из приведенного ниже вопроса, но у меня ничего не получилось.

Значения суммы листов Google из всех листов в книге

Любая помощь будет оценена

Ответы [ 2 ]

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

Давайте посмотрим, работает ли этот обходной путь для вас.

В этом случае, если вы хотите, чтобы функция получала все ячейки и сумму, вы должны попытаться сопоставить листы, из которых вы хотите получить свои значения. В вашем случае вы можете найти все значения, которые число .

/**
 * Sum all the values in the cells/range of all the sheets that match the
 * regular expressión `(\d)+`
 *
 * @param {string} A1Notation - Range in A1Notation that would be sum for all the cells  
 */
function SUM_SHEETS(A1Notation){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();

  var regEx = /\b\d+\b/; // The regEx that will match the sheets

  var result = 0;
  for(var i=0; i < sheets.length; i++){
    var sheet = sheets[i];

    // Check that your sheet is matching your regular Expression
    if( regEx.test(sheet.getName())){

      var range = sheet.getRange(A1Notation);
      var values = range.getValues();

      // Iterate through all the range from all the current sheet
      for(var j=0; j < values.length; j++){
        for(var k=0; k < values[j].length; k++){
          var value = values[j][k];

          // Only sum when the cell is a number
          if (typeof value == "number"){
            result += value;
          }
        }
      }
    }
  }

  return result;
}

Учтите, что входным параметром является строка, представляющая ваш диапазон, чтобы вы могли перебирать листы.

First Value Second Value Sum of Values

Также позаботьтесь о листах, в этом временном решении я использую regExp, который будет суммировать все значения, которые являются числом (только цифры).

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

Как правило, лучше всего собирать все свои данные за каждый день, за каждый месяц и за все годы в одной вкладке. каждый элемент в отдельной строке с датой, как в базе данных.

Гораздо проще разбить данные, которые в целом на одной вкладке, на разные вкладки для суммирования / подсчета / анализа, чем объединять данные, находящиеся в разных вкладки на одну.

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