Подсчет ячеек с определенным цветом фона в Google Sheets - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь создать визуальную ротацию для моего ресторана, используя Google Sheets.Мне нужно посчитать цвет фона строки, чтобы получить число для числа получасовых периодов, отработанных в тот день.

Вот ссылка на страницу Google:

https://docs.google.com/spreadsheets/d/19IEDGZypi3nVt55-OayvPo__pbV0sTuRQ3wCJZ1Mhck/edit?usp=sharing

И скрипт, который я использую:

function countBG(range, colorref) {

  var sheet = SpreadsheetApp.getActiveSheet();
  var color = sheet.getRange(colorref).getBackground();
  var range = sheet.getRange(range);
  var rangeVal = range.getValues();
  var count = 0;
  var allColors = range.getBackgrounds();
  for (var i = 0; i < allColors.length; i++) {
      for (var j = 0; j < allColors[0].length; j++) {
          if (allColors[i][j] == color) count += 1;
      };
  };
  return count;
}

Я обнаружил, что скрипт работает при первом запуске, но после этого выдает ошибку:

Диапазон не найден (строка 4, файл "Код")

Буду признателен за любую помощь в получении этой работы, я новичок в Google Sheets и сценарии, так что, возможно, пропустил что-то очевидное.

Спасибо,

БД.

Ответы [ 2 ]

0 голосов
/ 29 июля 2018

По какой-то причине SpreadsheetApp.getActiveSheet().getRange(...) дает мне только матрицу значений, а не фактический диапазон.

Мое решение (обратите внимание, что здесь диапазон String):

function countColoredCellsInRange(countRange, expectedBackground) {
  var range = SpreadsheetApp.getActiveSpreadsheet().getRange(countRange);
  var backgrounds = range.getBackgrounds();

  var coloredCellsAmount = 0;
  for (var i = 0; i < backgrounds.length; ++i) {
    for (var j = 0; j < backgrounds[i].length; ++j) {
      var currentBackground = backgrounds[i][j];
      if (currentBackground == expectedBackground) {
        ++coloredCellsAmount;
      }
    }
  }

  return coloredCellsAmount;
};

Пример использования:

=countColoredCellsInRange("Sheet!A2:A" ; "#00ff00")

Кроме того, здесь является примером его работы (расчет процентов в листе «График прогресса»).

0 голосов
/ 26 апреля 2018

Если вы хотите запустить его как пользовательскую функцию и просто использовать одну строку в качестве ввода, это сработает.

Вы бы передали переменные строки следующим образом: =countBG("D6:AH6")

function countBG(input) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var colors = sheet.getRange(input).getBackgrounds();
  var count = 0;
  Logger.log(colors);
  for (var i = 0; i < colors.length; i++) {
      for (var j = 0; j < colors[0].length; j++) {
          if (colors[i][j] != "#ffffff") count += 1;
      };
  };
  Logger.log(count);
  return count;
}

Пример в листе здесь в столбце AI

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