在Google表格中计算具有特定背景颜色的单元格

时间:2018-04-26 01:10:51

标签: google-apps-script google-sheets

我正在尝试使用Google表格为我的餐厅制作视觉旋转。我需要计算一行的背景颜色,以获得当天工作的半小时数的数字。

以下是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行,文件&#34;代码&#34;)

感谢任何有助于此工作的帮助,我是Google表格和脚本的新手,因此可能会遗漏一些明显的东西。

谢谢,

DB。

2 个答案:

答案 0 :(得分:0)

如果您想将其作为自定义函数运行,并且只使用一行作为输入,这将起作用。

您传递行变量,如=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;
}

Example in the sheet here in column AI

答案 1 :(得分:0)

出于某种原因,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")

此外,here就是它的示例(在“进度图”表中计算百分比)。