How to change font color of particular cell apache poi 3.9

85,147

You're currently creating some of your cells twice, which is why it's all going wrong

Firstly, I'd suggest you move the cell style creation to nearer the top of your code. Remember - cell styles are scoped to a workbook, so don't create one per cell!

        CellStyle style = wb.createCellStyle();
        Font font = wb.createFont();
        font.setColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setFont(font);
        // Set more colours on the style as needed
        // Set formatting rules on the style as needed

Now, depending on your preference, either do your cell creation like this:

        Cell cell;

        cell = rowxl.createCell(0);
        cell.setCellValue("ABC");
        cell.setCellStyle(style);

        cell = rowxl.createCell(1);
        cell.setCellValue("aaa");
        cell.setCellStyle(style);

Or like this:

    rowxl.createCell(1).setCellValue("ABC");
    rowxl.createCell(2).setCellValue("aaa");
    rowx1.getCell(1).setCellStyle(style);
    rowx1.getCell(2).setCellStyle(style);

Just don't do that weird hybrid you've got at the moment, as you end up creating cells twice and missing out styling!

Share:
85,147
H4SN
Author by

H4SN

Android and iOS Developer

Updated on May 11, 2020

Comments

  • H4SN
    H4SN almost 4 years

    I can change foreground color with the following code in apache POI. Now I want to change font color of a single cell.

    CellStyle style = wb.createCellStyle();
                            style.setFillForegroundColor(IndexedColors.GREEN.getIndex());
                            style.setFillPattern(CellStyle.SOLID_FOREGROUND);
                            cell = rowxl.createCell((short) 7);
                            cell.setCellValue(" <<<<ONTRACK>>>>");
                            cell.setCellStyle(style);
    
    
                            rowxl.createCell(0).setCellValue(TEAM);
    

    I have tried this but it does not change the color of first two columns

    code:

    public class fclr {
         public static void main(String[] args)  throws Exception {
    
             InputStream inp = new FileInputStream("c:/workbook1.xls");
                Workbook wb = WorkbookFactory.create(inp);
                CreationHelper createHelper = wb.getCreationHelper();
                Sheet sheet = wb.getSheetAt(0);
                Row rowxl = sheet.createRow((short)0);
    
    
                Cell cell = rowxl.createCell(0);
    
                //apply some colors from the standard palette,
                // as in the previous examples.
                //we'll use red text on a lime background
    
                CellStyle style = wb.createCellStyle();
    
    
              rowxl.createCell(1).setCellValue("ABC");
            rowxl.createCell(2).setCellValue("aaa");
                Font font = wb.createFont();
                font.setColor(HSSFColor.BLACK.index);
                style.setFont(font);
    
    
                cell.setCellStyle(style);
    
                FileOutputStream fileOut = new FileOutputStream("c:/workbook1.xls");
                wb.write(fileOut);
                fileOut.close();
    
    
    
         }
    
    } 
    
  • Jinu P C
    Jinu P C almost 7 years
    HSSFColor.BLACK is deprecated instead of this use HSSFColor.HSSFColorPredefined.BLACK
  • Ishan
    Ishan almost 4 years
    Is there a way to get font color from HEX or may be RGB?
  • Gagravarr
    Gagravarr almost 4 years
    @Ishan Sure! But you'll need to ask that as a new question...
  • Ishan
    Ishan almost 4 years
    Did it! Just converted my string to short color, thanks :)