Google Sheets Суммирование ячейки по изменяющемуся количеству листов - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь преобразовать электронную таблицу из Excel в Google Sheets. Большинство формул работали, как и ожидалось, за исключением этой формулы:

=SUM('J Slater:Job Sheet'!C6)

Я использую ее для суммирования определенной ячейки c по диапазону листов. Эта формула позволяет добавлять листы между диапазонами Также можно добавить в ячейку суммы без каких-либо изменений в формуле. Я не могу найти способ воспроизвести это в Google Sheets.

1 Ответ

1 голос
/ 23 февраля 2020

Вы можете сделать это с помощью пользовательских функций в листах Google:

Сценарий:

/**
 * @returns {Number} Sum of all values from startSheet to endSheet
 * @customfunction
 *
 * @param {String=} startSheet
 * @param {String=} endSheet
 * @param {String=} range
 */
function SUMSHEETS(startSheet = 'Sheet1', endSheet = 'Sheet2', range = 'A2') {
  if ([...arguments].some(arg => typeof arg !== 'string' || arg === ''))
    throw new Error('All arguments must be non-empty strings');
  const [addValue, getOutput] = (() => {
    let output = 0;
    return [
      sh => {
        output += sh.getRange(range).getValue();
      },
      () => output,
    ];
  })();
  let toggle = 0;
  const end = SpreadsheetApp.getActive()
    .getSheets()
    .some(sheet => {
      if (toggle) addValue(sheet);
      switch (sheet.getName()) {
        case startSheet:
          toggle = 1;
          addValue(sheet);
          break;
        case endSheet:
          return true;
      }
    });
  if (!toggle || !end) throw new Error('Sheet(s) not found!');
  return getOutput();
}

Использование:

=SUMSHEETS("J Slater","Job Sheet","C6")
...