Is there any alternate way to avoid deprecation in Apache POI, for HSSF built-in colors?

BongCule picture BongCule · Nov 2, 2017 · Viewed 7.6k times · Source

In my code i want to change the cell colors of a particular column of a HSSFWorkbook, if the text is "PASS". But when i was writing the code, lots of methods and constants like BRIGHT_GREEN.index, setFillPattern, SOLID_FOREGROUND are deprecated. I have searched for an alternative in Apache POI official website, but the code given there is also deprecated. I know there is no problem if i mention @deprecation tag, but sometimes after 100-150 lines(rows), cell-color is not changing. Can anyone please tell me is there any alternative to avoid @deprecation? FYI: i am using poi-bin-3.17-beta1-20170701 jars. Thanks in advance :)

if(cell.getStringCellValue().equalsIgnoreCase("Pass")){
                    HSSFCellStyle style = workbook.createCellStyle();
                    style.setFillForegroundColor(HSSFColor.BRIGHT_GREEN.index);
                    style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
                    cell.setCellStyle(style);
                }

Answer

Andrei Sfat picture Andrei Sfat · Nov 2, 2017

From their documentation:

/**
 * @deprecated use {@link HSSFColorPredefined} instead
 */
@Deprecated
@Removal(version="3.18")
public static class BRIGHT_GREEN extends HSSFColorRef {
    private static final HSSFColorPredefined ref = HSSFColorPredefined.BRIGHT_GREEN;
    public static final short index = ref.getIndex();
    public static final int index2 = ref.getIndex2();
    public static final short[] triplet = ref.getTriplet();
    public static final String hexString = ref.getHexString();
    public BRIGHT_GREEN() { super(ref); }
}

So in your case: HSSFColor.HSSFColorPredefined.BRIGHT_GREEN

For your setFillPattern:

    style.setFillPattern(FillPatternType.SOLID_FOREGROUND);

Your new code should look like this

    style = workbook.createCellStyle();
    style.setFillForegroundColor(HSSFColor.HSSFColorPredefined.BRIGHT_GREEN.getIndex())
    style.setFillPattern(FillPatternType.SOLID_FOREGROUND);