检查一行中至少有3个单元格是否具有特定背景

时间:2014-07-04 07:52:24

标签: google-apps-script

1)我将至少有4列,其中单元格将具有不同的背景 2)我必须检查一行中至少有3个单元格是否说过RED背景 3)如果是这样的话 - 在该行的单元格中输出smth,按照"警告"

我没有js家伙,我唯一得到的是:

function check() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Canvas');
  if (sheet.getRange("E5").getBackground() == '#ff0e13' && sheet.getRange("F5").getBackground() == '#ff0e13' && sheet.getRange("D5").getBackground() == '#ff0e13') {
    return sheet.getRange('M5').setValue('Warning');
  }
}

这仅检查某一行中的某些单元格。如何编辑它以使用数组("将它拖到所有行")?

1 个答案:

答案 0 :(得分:1)

解决方案是读取数组中的背景颜色并逐行迭代此数组,计算每次出现的红色(或任何其他颜色,只需在条件中调整)。 然后更新另一个数组中的工作表值,最后将两个数组写回工作表。

阅读代码中的注释,我添加了将“警告”单元格着色的选项,但如果您不需要,可以将其删除。

function checkBGColors() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Canvas');
  var maxWidthRange = sheet.getRange(1,1,sheet.getLastRow(),sheet.getMaxColumns());// get the whole filled part of the sheet + every possible column
  var BGColors = maxWidthRange.getBackgrounds();
  var Values = maxWidthRange.getValues();
  for(var n=0;n<BGColors.length;n++){
    var count = 0;
    for(var BG in BGColors[n]){
      Logger.log(BGColors[n][BG]);
      if(BGColors[n][BG] == '#ff0000'){
        count++ ; // if BG color is red then increment counter
      }
    }
  Logger.log('Count = '+count);
    if(count >= 3){
      Values[n][12] = 'Warning' ;// column M is index 12, adapt if needed
      BGColors[n][12] = 'Orange';// eventually colorize the warning cell
    }
  }
  maxWidthRange.setValues(Values);// update values
  maxWidthRange.setBackgrounds(BGColors);//update colors
}