如何改变特定cell apache poi 3.9的字体颜色

时间:2022-08-04 20:24:28

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

我可以使用apache POI中的以下代码更改前景颜色。现在我要改变单个单元格的字体颜色。

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();



     }

} 

1 个解决方案

#1


50  

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!

只是不要做你现在拥有的那种奇怪的混合,因为你最终会创建两次单元并错过样式!

#1


50  

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!

只是不要做你现在拥有的那种奇怪的混合,因为你最终会创建两次单元并错过样式!