简体   繁体   中英

How to highlight a cell in excel using APACHE POI HSSF

public class createChart {

public static void main(String[] args) {
    ArrayList<Integer> studentList = new ArrayList<>();
    ArrayList<Integer> gradeList = new ArrayList<>();
    ArrayList<String> header = new ArrayList<>();

    header.add("Attendance Sheet");

    for(int i = 1; i <= 20; i++){
        studentList.add(i);
        if(i <= 20){
            gradeList.add((80+i));
        }

    }

    int bordernum = 2;
    try {
        FileOutputStream fileOut = new FileOutputStream("Attendance Sheet.xls");
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet worksheet = workbook.createSheet("Attendance sheet");



        // row 1 for Prinitng attendance sheet in center
        HSSFRow row0 = worksheet.createRow((short) 0);//1
        HSSFCell cellmid = row0.createCell((short) (gradeList.size()/2)-1);//2
        cellmid.setCellValue(header.get(0));//3
        HSSFCellStyle cellStylem = workbook.createCellStyle();//4
        cellStylem.setFillForegroundColor(HSSFColor.GOLD.index);//5
        cellmid.setCellStyle(cellStylem);//6
        createBorders(workbook, cellmid, 1);
        HSSFCell cellmid2 = row0.createCell((short) (gradeList.size()/2));//2
        createBorders(workbook, cellmid2, 1);



        // row 2 with all the dates in the correct place
        HSSFRow row1 = worksheet.createRow((short) 1);//1
        HSSFCell cell1;
        for(int y = 0; y < gradeList.size(); y++){

            cell1 = row1.createCell((short) y+1);//2
            cell1.setCellValue(gradeList.get(y));//3
            createBorders(workbook, cell1, bordernum);

        }
        HSSFCellStyle cellStylei = workbook.createCellStyle();//4
        cellStylei.setFillForegroundColor(GREEN.index);//5



        // row 3 and on until the studentList.size() create the box.
        int counter = 0;
        for(int stu = 2; stu <= (studentList.size()+1); stu++){
            HSSFRow Row = worksheet.createRow((short) stu);//1
            for(int gr = 0; gr <= gradeList.size(); gr++){
                if(gr == 0){
                    HSSFCell cell = Row.createCell((short) 0);//2
                    cell.setCellValue(studentList.get(counter));//3
                    HSSFCellStyle cellStyle2 = workbook.createCellStyle();//4
                    cellStyle2.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
                    cellStyle2.setFillForegroundColor(HSSFColor.GOLD.index);//5
                    cell.setCellStyle(cellStyle2);//6
                    createBorders(workbook, cell, 2);
                }else{
                    HSSFCell Cell = Row.createCell((short) gr);//2
                    createBorders(workbook, Cell, 3);
                }


            }
            counter++;
        }
        workbook.write(fileOut);
        fileOut.flush();
        fileOut.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
public static void createBorders(HSSFWorkbook workbook,HSSFCell cell, int x){
    if( x == 1){
        HSSFCellStyle style = workbook.createCellStyle();
        //style.setFillBackgroundColor(HSSFColor.HSSFColorPredefined.LIGHT_BLUE.getIndex());
        //style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        style.setBorderBottom(BorderStyle.THICK);
        style.setBottomBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setBorderLeft(BorderStyle.THICK);
        style.setLeftBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setBorderRight(BorderStyle.THICK);
        style.setRightBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setBorderTop(BorderStyle.THICK);
        style.setTopBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        cell.setCellStyle(style);
    }
    else if(x == 2){
        HSSFCellStyle style = workbook.createCellStyle();
        //style.setFillBackgroundColor(HSSFColor.HSSFColorPredefined.LIGHT_BLUE.getIndex());
        //style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        style.setBorderBottom(BorderStyle.MEDIUM);
        style.setBottomBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setBorderLeft(BorderStyle.MEDIUM);
        style.setLeftBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setBorderRight(BorderStyle.MEDIUM);
        style.setRightBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setBorderTop(BorderStyle.MEDIUM);
        style.setTopBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        cell.setCellStyle(style);
    }else {
        HSSFCellStyle style = workbook.createCellStyle();
        //style.setFillBackgroundColor(HSSFColor.HSSFColorPredefined.AQUA.getIndex());
        //style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        style.setBorderBottom(BorderStyle.THIN);
        style.setBottomBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setBorderLeft(BorderStyle.THIN);
        style.setLeftBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setBorderRight(BorderStyle.THIN);
        style.setRightBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setBorderTop(BorderStyle.THIN);
        style.setTopBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        cell.setCellStyle(style);
    }

}

The code writes values from studentList (row 3 to studentList.size()+2) to each row at column 0 and writes from gradesList (row 1 from column 1 to gradesList.size()+1) to a file Attendance chart

What should I edit so that I can highlight all the studentList with light green, gradesList with light orange, Title(header) with yellow and the rest of the blank boxes with light blue?

Image 1 is the product of the code above Image 2 I need my sheet to look like this

I need help to transform my sheet from Image 1 to Image 2

You are creating the background color in line 5 but then overriding it when you are creating the borders. You have to apply all the styles at the same time to solve the issue.

Apart of that, you have to include the FillPattern , for example:

        style.setFillForegroundColor(HSSFColor.GOLD.index);
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);

You can find an example in the Apache POI Quick Guide

Hope this can help. Thanks.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM