Как покрасить строки в существующем файле Excel следующим
условия:
- Если разница между EXPECT_TIME (столбец) и
ACTUAL_TIME (столбец) больше 30 минут, затем заполните фон
как желтый.
- Если ACTUAL_TIME находится в пределах EXPECT_TIME, заполните его
как зеленый.
- Если в какой-либо строке не обновлено «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();
}
}
Я ожидаю, что выходные данные будут соответствовать условиям, но выходные данные будут нулевыми.