setConditionalFormat_()

in marketing-analytics/activation/sheets-based-installer/src/apps_script/0_common/enhanced_sheet.js [354:390]


  setConditionalFormat_(columns, conditionalFormats) {
    let requiredColumnLetter;
    const requiredIndex = columns.indexOf(conditionalFormats.requiredColumn_);
    if (requiredIndex > -1) {
      requiredColumnLetter = getColumnLetter(requiredIndex);
    } else {
      console.warn('No required column, so REQUIRED is not supported.');
    }
    const rules = [];
    columns.forEach((field, index) => {
      if (!conditionalFormats[field]) return;
      const [requried, type] = conditionalFormats[field].split('_');
      const columnLetter = getColumnLetter(index);
      const range = this.sheet.getRange(`${columnLetter}2:${columnLetter}`);
      const conditions = [];
      if (requried === 'REQUIRED' && requiredColumnLetter) {
        conditions.push(
          `AND(NOT(ISBLANK($${requiredColumnLetter}2)),ISBLANK($${columnLetter}2))`
        )
      }
      if (type) {
        conditions.push(
          `AND(NOT(ISBLANK($${columnLetter}2)),NOT(IS${type}($${columnLetter}2)))`
        )
      }
      const fomular = conditions.length > 1
        ? `=OR(${conditions.join(',')})`
        : `=${conditions[0]}`;
      const rule = SpreadsheetApp.newConditionalFormatRule()
        .whenFormulaSatisfied(fomular)
        .setBackground('#F5AEA9')
        .setRanges([range])
        .build();
      rules.push(rule);
    });
    this.sheet.setConditionalFormatRules(rules);
  }