计算具有动态行数的列中的彩色单元格数

时间:2013-07-26 05:28:21

标签: google-apps-script google-sheets

在每列的底部,我试图显示该列中有多少单元格具有特定的背景颜色。这就是我希望它做的事情: Picture of intended result

问题是它是甘特图,我将不断插入行。我可以使用以下方法使用固定行数来执行此操作:

=countCellsWithBackgroundColor("#cfe2f3", "B1:B22")

使用我发现的这个功能:

function countCellsWithBackgroundColor(color, rangeSpecification) {

  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(rangeSpecification);

  var x = 0;

  for (var i = 1; i <= range.getNumRows(); i++) {
    for (var j = 1; j <= range.getNumColumns(); j++) {

      var cell = range.getCell(i, j);

      if(cell.getBackgroundColor() == color)
        x++;
    }
  }

  return x;
}

我无法弄清楚如何在列中的每个单元格中提供该功能。我得到的错误就像“必须是一个范围”。

2 个答案:

答案 0 :(得分:0)

您可以使用更有效的方法通过在函数中使用数组来实现相同的结果,如下所示

function countCellsWithBackgroundColor(color, rangeSpecification) {

  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var backGroundColors = sheet.getRange(rangeSpecification).getBackgrounds();

  var x = 0;

  for (var i = 0; i < backGroundColors.length; i++) {
    for (var j = 0; j < backGroundColors[0].length; j++) {

      if(backGroundColors[i][j] == color){ x++ }
    }
  }
  return x;
}

答案 1 :(得分:-1)

WORKING EXAMPLE WITH AUTO UPDATE

function countCellsWithBackgroundColor(color, rangeSpecification) {

var sheet = SpreadsheetApp.getActiveSpreadsheet();
var backGroundColors = sheet.getRange(rangeSpecification).getBackgrounds();

var x = 0;

for (var i = 0; i < backGroundColors.length; i++) {
for (var j = 0; j < backGroundColors[0].length; j++) {

  if(backGroundColors[i][j] == color){ x++ }
   }
 }
 return x;
}

function onEdit(e)
{
 SpreadsheetApp.getActiveSheet().getRange('H26').setValue(Math.random());
}

现在将虚拟单元格插入电子表格函数以进行自动更新

=countCellsWithBackgroundColor("#0f9d58","A5:A26",H26)