Как отформатировать существующую электронную таблицу и цветовой код на основе условий в Java с использованием Apache POI - PullRequest
0 голосов
/ 29 апреля 2019

Как покрасить строки в существующем файле Excel следующим условия:

  1. Если разница между EXPECT_TIME (столбец) и ACTUAL_TIME (столбец) больше 30 минут, затем заполните фон как желтый.
  2. Если ACTUAL_TIME находится в пределах EXPECT_TIME, заполните его как зеленый.
  3. Если в какой-либо строке не обновлено «ACTUAL_TIME» (столбец) затем заполните его как красный. [Лист Excel, который должен быть отформатирован] У меня есть попытался прочитать существующий файл, открыв FileInputstream для файл & затем создал XSSFWorkbook. я использовал Метод setFillBackgroundColor для заливки цвета.

package com.jcg.csv2excel;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.ConditionalFormattingRule;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.SheetConditionalFormatting;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


public class Format {
    public static void main(String[] args) throws IOException {
        String excelFilePath = "C:\\Troop\\Csv_To_Excel\\config\\EXCEL_DATA.xlsx";
        FileInputStream inputStream = new FileInputStream(new File(excelFilePath));

        XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
        //workbook.getSheet(Sheet);
        Sheet sheet = workbook.getSheetAt(0);
        SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
        ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule("=IF(C5 > B5 + TIME(0,30,0),TRUE,FALSE)");
        org.apache.poi.ss.usermodel.PatternFormatting pattern_Fmt = rule1.createPatternFormatting();
        pattern_Fmt.setFillBackgroundColor(IndexedColors.YELLOW.index);
        ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule("=IsBlank(B7:X16)");
        org.apache.poi.ss.usermodel.PatternFormatting patternFmt = rule2.createPatternFormatting();
        patternFmt.setFillBackgroundColor(IndexedColors.RED.index);
        ConditionalFormattingRule [] cfRules =
        {
            rule1, rule2
        };

        CellRangeAddress[] regions = {
            CellRangeAddress.valueOf("B7:B16")
        };

        sheetCF.addConditionalFormatting(regions, cfRules);
        inputStream.close();

        FileOutputStream outputStream = new FileOutputStream(excelFilePath);
        workbook.write(outputStream);
        workbook.close();
        outputStream.close();
    }
}

Я ожидаю, что выходные данные будут соответствовать условиям, но выходные данные будут нулевыми. Picture

...