Google App脚本(电子表格) - 根据颜色计算单元格值

时间:2015-05-10 10:07:05

标签: google-apps-script google-sheets

我希望根据同一列但在y行上的单元格颜色计算行x上的单元格值。

IE: 如果B3,D3和E3是蓝色的。 然后将B4,D4和E4的值相加。

我目前的尝试(相当差):

function sumWhereBackgroundColorElseWhereIs(color, colorRange, valueRange) {

  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var colorRange = sheet.getRange(colorRange);
  var valueRange = sheet.getRange(valueRange);

  var total = 0;

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

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

      if(cell.getBackgroundColor() == color) {

      }
    }
  }
  for 
  var valueCell = range.getCell(i, j);
  total += parseFloat(cell.getValue());
  return total;
}

2 个答案:

答案 0 :(得分:0)

使用自定义功能时,您无法按照自己的意图去做。

自定义函数中的range参数从范围向函数发送值数组,而不是范围对象本身。

因此,在您的代码中,colorRange将包含范围中的值而不是范围本身,因此无法确定背景颜色。

答案 1 :(得分:0)

你无法按照你的方式调用背景颜色。

已发布here

的变通方法

此外,您必须键入颜色代码而不是名称。

在您的情况下,您必须像这样输入自定义功能

=sumWhereBackgroundColorElseWhereIs("#0000ff","B3:F3","B4:F4")

或者像这样

 =sumWhereBackgroundColorElseWhereIs("#0000ff",CELL("address",B3)&":"&CELL("address",F3),CELL("address",B4)&":"&CELL("address",F4))

你的脚本看起来像这样

 function sumWhereBackgroundColorElseWhereIs(color, ColorRange, ValueRange) {

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  var colorRange = sheet.getRange(ColorRange);
  var valueRange = sheet.getRange(ValueRange);
  var firstColumn = colorRange.getColumn();
  var lastColumn = colorRange.getLastColumn();
  var valueRangeRow = valueRange.getRow();
  var backgrounds = colorRange.getBackgrounds();
  backgrounds = backgrounds.toString().split(",");

  var total = 0;

  for (var i = firstColumn; i <= lastColumn; i++) {
    var ref = i - firstColumn;
    if (backgrounds[ref] === color) {
      total = total + Number(sheet.getRange(valueRangeRow, i).getValue());
    }
  }

  return total; 
}