简体   繁体   English

如何使用APACHE POI HSSF在Excel中突出显示单元格

[英]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 该代码将studentList(第3行到studentList.size()+ 2)中的值写入第0列的每一行,并从gradesList(第1列从第1行到gradesList.size()+ 1)中的值写入文件出勤表

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? 我应如何编辑,以便可以用浅绿色突出显示所有studentList,用浅橙色突出显示gradesList,用黄色突出显示Title(header)和用浅蓝色突出显示其余空白框?

Image 1 is the product of the code above Image 2 I need my sheet to look like this 图片1是上面代码 2 的代码的产品 我需要我的工作表看起来像这样

I need help to transform my sheet from Image 1 to Image 2 我需要帮助将我的工作表从图像1转换为图像2

You are creating the background color in line 5 but then overriding it when you are creating the borders. 您正在第5行中创建背景色,但是在创建边框时将其覆盖。 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: 除此之外,您还必须包括FillPattern ,例如:

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

You can find an example in the Apache POI Quick Guide 您可以在Apache POI快速指南中找到示例。

Hope this can help. 希望这会有所帮助。 Thanks. 谢谢。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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