Apache POI - условное форматирование - необходимо установить другой диапазон ячеек для правила и форматирования - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь создать пустой шаблон Excel, используя apache poi java. Мне нужно добавить правило - когда столбца нет. 3, затем столбцы с 7 по 12 должны быть выделены каким-либо цветом (в качестве обязательного индикатора для пользователя).

Я мог бы найти ниже код, который окрашивает ячейку, когда условие выполняется в той же ячейке. Но я хочу покрасить / отформатировать разные ячейки, когда условие выполняется в текущей ячейке.

`   XSSFSheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
    ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.GT, "5");

    PatternFormatting patternFmt = rule1.createPatternFormatting();
    patternFmt.setFillBackgroundColor(IndexedColors.YELLOW.index);

    sheetCF.addConditionalFormatting(addressList.getCellRangeAddresses(), rule1); //when rule1 is met, same cell is colored yellow

Но я хочу, чтобы когда выполнялось правило1, тогда закрасили другой диапазон ячеек.

Возможно ли это в пои и как?

1 Ответ

0 голосов
/ 04 мая 2018

Excel предоставляет правила условного форматирования на основе формул.

Формула =AND(ISNUMBER($C1), $C1>5) возвращает True, если значение в $C1 является числовым и больше 5. Если эта формула применяется к диапазону G1:L1000, то каждая ячейка в этом диапазоне будет истинной, если значение в столбце C соответствующей строки выполняется это условие. Это связано с тем, что столбец C фиксируется с использованием $C в формуле. Но номера строк не фиксированы и поэтому являются относительными.

Пример использования apache poi:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.apache.poi.ss.util.CellRangeAddress;

import java.io.FileOutputStream;

public class ConditionalFormatting {

 public static void main(String[] args) throws Exception {
  Workbook workbook = new XSSFWorkbook();

  Sheet sheet = workbook.createSheet("new sheet");
  SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();

  ConditionalFormattingRule rule = sheetCF.createConditionalFormattingRule("AND(ISNUMBER($C1), $C1>5)");
  PatternFormatting fill = rule.createPatternFormatting();
  fill.setFillBackgroundColor(IndexedColors.YELLOW.index);
  fill.setFillPattern(PatternFormatting.SOLID_FOREGROUND);

  ConditionalFormattingRule[] cfRules = new ConditionalFormattingRule[]{rule};

  CellRangeAddress[] regions = new CellRangeAddress[]{CellRangeAddress.valueOf("G1:L1000")};

  sheetCF.addConditionalFormatting(regions, cfRules);

  workbook.write(new FileOutputStream("ConditionalFormatting.xlsx"));
  workbook.close();

 }
}

Теперь, если вы поместите в столбец C что-то числовое и больше 5, ячейки в столбцах G:L будут заполнены желтым цветом.

...