• Java通过cellstyle属性设置Excel单元格常用样式全面总结


    最近做了一个导出Excel的功能,导出是个常规导出,但是拿来模板一看,有一些单元格的样式设置,包括合并,背景色,字体等等,毕竟不是常用的东西,需要查阅资料完成,但是搜遍全网没有一个全面的,工作完成后,我便总结了一下,能够应对日常开发使用的Excel样式设置属性。

    这里重点总结生成Excel中对单元格的样式设置,不讲解如何导出Excel,基本导出很容易。

    直接上代码,按照注释来看依次是:

    首先创建一个工作薄

    下面所有的操作都是对这个style对象来设置的。

    1. // 创建excel工作簿
    2. SXSSFWorkbook wb = new SXSSFWorkbook(getXSSFWorkbook(examPath), 1000);
    3. //获取样式
    4. CellStyle style = wb.createCellStyle();

    1.设置单元格对齐,属性使用参照注解

    1. //1、先设置单元格对齐方式
    2. //水平对齐,一般对齐方式。文本数据左对齐。数字、日期和时间是正确对齐的。布尔类型居中。
    3. style.setAlignment(HorizontalAlignment.GENERAL);
    4. //靠左
    5. style.setAlignment(HorizontalAlignment.LEFT);
    6. // 靠右
    7. style.setAlignment(HorizontalAlignment.RIGHT);
    8. // 居中
    9. style.setAlignment(HorizontalAlignment.CENTER);
    10. // 填充单元格的值,跨越单元格的整个宽度
    11. style.setAlignment(HorizontalAlignment.FILL);
    12. // 水平对齐对齐(左右齐平)。对于每行文本,将单元格中换行文本的每行左右对齐
    13. style.setAlignment(HorizontalAlignment.JUSTIFY);
    14. // 水平对齐在多个单元格中居中
    15. style.setAlignment(HorizontalAlignment.CENTER_SELECTION);
    16. //平铺。表示单元格中每行文本中的text均匀分布.跨越单元格的宽度,左右外边距齐平。
    17. style.setAlignment(HorizontalAlignment.DISTRIBUTED);

    2.设置单元格垂直对齐,参考注解

    1. //2.此枚举值指示单元格的垂直对齐类型,即:
    2. //垂直居中对齐
    3. style.setVerticalAlignment(VerticalAlignment.CENTER);
    4. //顶部对齐
    5. style.setVerticalAlignment(VerticalAlignment.TOP);
    6. //底部对齐
    7. style.setVerticalAlignment(VerticalAlignment.BOTTOM);
    8. //对齐。
    9. style.setVerticalAlignment(VerticalAlignment.JUSTIFY);
    10. //分布。
    11. style.setVerticalAlignment(VerticalAlignment.DISTRIBUTED);

    3.设置背景色

    1. //3.设置背景色
    2. style.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
    3. //必须设置 否则背景色不生效
    4. style.setFillPattern(FillPatternType.SOLID_FOREGROUND);

    背景色的IndexedColors类中属性对应的具体颜色如下所示:

    (1)枚举值对应的颜色

    (2)色卡名称对应的颜色

     GREY_80_PERCENTINDIGO

    PLUM                           BROWN

    OLIVE_GREEN            DARK_GREEN

    SEA_GREEN              DARK_TEAL

    GREY_40_PERCENT  BLUE_GREY

    ORANGE                    LIGHT_ORANGE

    GOLD                        LIME

    AQUA                       LIGHT_BLUE

    TAN                        LAVENDER

    ROSE                    PALE_BLUE

    LIGHT_YELLOW           LIGHT_GREEN

    LIGHT_TURQUOISE        SKY_BLUE

    BLUE                               DARK_RED

    VIOLET                          TURQUOISE

    YELLOW                       PINK

    DARK_BLUE   LIGHT_CORNFLOWER_BLUE

    ROYAL_BLUE                         CORAL

    ORCHID                         LIGHT_TURQUOISE

    LEMON_CHIFFON           PLUM

    CORNFLOWER_BLUE   GREY_50_PERCENT

    GREY_25_PERCENT            TEAL

    VIOLET                     DARK_YELLOW

    DARK_BLUE                      GREEN

    DARK_RED                    TURQUOISE

    PINK                           YELLOW

    BLUE                   BRIGHT_GREEN

    RED                      WHITE

    BLACK

    4.设置字体有关样式

    基本涵盖了Excel中对文字常用的操作行为

    1. //4.设置字体样式
    2. Font titleFont = wb.createFont();
    3. // 设置字体的名称(例如Arial)
    4. titleFont.setFontName("宋体");
    5. // 以1/20点为单位设置字体高度。
    6. titleFont.setFontHeight((short) 10);
    7. // 设置是否使用斜体
    8. titleFont.setItalic(true);
    9. // 设置是否在文本中使用删除线横线
    10. titleFont.setStrikeout(true);
    11. //颜色设置
    12. titleFont.setColor((short) 111);
    13. // 设置普通、上标或下标。
    14. titleFont.setTypeOffset((short) 5);
    15. //下划线
    16. titleFont.setUnderline((byte) 0000);
    17. // 是否加粗
    18. titleFont.setBold(true);
    19. // 设置字体高度
    20. titleFont.setFontHeightInPoints((short) 12);
    21. style.setFont(titleFont);

    5.边框设置

    1. //5.边框设置
    2. style.setBorderBottom(BorderStyle.THIN);
    3. style.setBorderLeft(BorderStyle.THIN);
    4. style.setBorderTop(BorderStyle.THIN);
    5. style.setBorderRight(BorderStyle.THIN);

    6.单元格合并操作

    合并单元格使用的是CellRangeAddress函数,该函数源码在下面,可以清晰看到输入参数代表什么怎么用,简单解释一下就是

    X:起始行  Y:结束行  a:起始列   b:结束列

    这样就清晰的画出了一个合并范围。

    1. // 6.合并单元格
    2. SXSSFSheet sheet = wb.createSheet("测试sheet");
    3. sheet.addMergedRegion(new CellRangeAddress(X, Y, a, b));
    4. //设置单元格宽度 ,X代表第几列
    5. sheet.setColumnWidth(X, 20 * 260);
    1. public CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol) {
    2. super(firstRow, lastRow, firstCol, lastCol);
    3. if (lastRow < firstRow || lastCol < firstCol) {
    4. throw new IllegalArgumentException("Invalid cell range, having lastRow < firstRow || lastCol < firstCol, " +
    5. "had rows " + lastRow + " >= " + firstRow + " or cells " + lastCol + " >= " + firstCol);
    6. }
    7. }

    工作之余总结一下,也是方便自己日后使用,有不对的地方欢迎指正。

  • 相关阅读:
    Linux文件系统
    【数据结构】----枚举
    Redis 如何实现分布式锁
    Java面试题之分布式/微服务篇
    1989-2022年企业排污许可证信息库数据(24万观测值)
    Dubbo的SPI机制和服务暴露
    ABAP BP维护客户cl_md_bp_maintain=>maintain
    Eureka的Ribbon负载均衡
    【AI设计模式】03-数据处理-流水线(Pipeline)模式
    IGCSE / A-levels 2022年秋季考试报名时间
  • 原文地址:https://blog.csdn.net/httpmc2018/article/details/134182172