文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java POI excel单元格背景色(填充)、字体颜色(对齐)、边框(颜色)、行高、列宽设置

2023-08-17 16:08

关注

需要的Maven环境配置
              org.apache.poi      poi      5.2.2                  org.apache.poi      poi-ooxml      5.2.2    

部分需要注意的问题,通过注释的方式写在代码里面了,看代码的时候需要注意下注释

        public static void setBackgroundColorCellStyle() throws IOException {        HSSFWorkbook workbook = new HSSFWorkbook();        HSSFSheet sheet = workbook.createSheet("excel样式设置");        int rowIndex = 0;        for (IndexedColors color : IndexedColors.values()) {            short colorIndex = color.getIndex();            HSSFCellStyle cell1Style = workbook.createCellStyle();            // 设置的背景颜色            cell1Style.setFillForegroundColor(colorIndex);            // 填充效果(全景填充)            cell1Style.setFillPattern(FillPatternType.SOLID_FOREGROUND);            cell1Style.setAlignment(HorizontalAlignment.CENTER);            cell1Style.setVerticalAlignment(VerticalAlignment.CENTER);            HSSFRow row = sheet.createRow(rowIndex++);            row.setHeight((short) (25 * 20));            // 第一列            HSSFCell cell1 = row.createCell(0);            cell1.setCellStyle(cell1Style);            cell1.setCellValue("X:" + colorIndex);            // 第二列            HSSFCellStyle cell2Style = workbook.createCellStyle();            cell2Style.setAlignment(HorizontalAlignment.CENTER);            cell2Style.setVerticalAlignment(VerticalAlignment.CENTER);            HSSFCell cell2 = row.createCell(1);            cell2.setCellStyle(cell2Style);            cell2.setCellValue(color.name());            // 设置列宽            sheet.setColumnWidth(0, 10 * 256 + 185);            sheet.setColumnWidth(1, 35 * 256 + 185);        }        FileOutputStream outputStream = new FileOutputStream("D:/temp/Excel背景颜色列表.xlsx");        workbook.write(outputStream);        outputStream.close();        workbook.close();    }

image.pngimage.pngimage.png

        public static void setFillBackgroundColor() throws IOException {        HSSFWorkbook workbook = new HSSFWorkbook();        HSSFSheet sheet = workbook.createSheet("excel填充设置");        int rowIndex = 0;        short colorIndex = IndexedColors.RED.getIndex(); // 选择红色(可参照上图背景色色号) --> 10        // 填充样式        for (FillPatternType patternType : FillPatternType.values()) {            HSSFCellStyle cell1Style = workbook.createCellStyle();            // 设置的背景颜色            cell1Style.setFillForegroundColor(colorIndex);            // 填充效果(全景填充)            cell1Style.setFillPattern(patternType);            // 设置垂直居中            cell1Style.setAlignment(HorizontalAlignment.CENTER);            cell1Style.setVerticalAlignment(VerticalAlignment.CENTER);            // 设置字体            HSSFFont font = workbook.createFont();            // 加粗            font.setBold(true);            cell1Style.setFont(font);            HSSFRow row = sheet.createRow(rowIndex++);            // 设置行高:height = 磅 * 20 (1磅=0.353毫米=20缇)-> POI中行高是"缇(twips)"            row.setHeight((short) (25 * 20));            // 第一列            HSSFCell cell1 = row.createCell(0);            cell1.setCellStyle(cell1Style);            cell1.setCellValue("code:" + patternType.getCode());            HSSFCellStyle cell2Style = workbook.createCellStyle();            // 设置垂直居中            cell2Style.setAlignment(HorizontalAlignment.CENTER);            cell2Style.setVerticalAlignment(VerticalAlignment.CENTER);            // 第二列            HSSFCell cell2 = row.createCell(1);            cell2.setCellStyle(cell2Style);            cell2.setCellValue(patternType.name());            // 设置列宽: width = 256*磅 + 185            sheet.setColumnWidth(0, 10 * 256 + 185);            sheet.setColumnWidth(1, 24 * 256 + 185);        }        FileOutputStream outputStream = new FileOutputStream("D:/temp/Excel背景填充效果.xlsx");        workbook.write(outputStream);        outputStream.close();        workbook.close();    }

image.pngimage.png

        public static void setCellFontStyle() throws IOException {        HSSFWorkbook workbook = new HSSFWorkbook();        HSSFSheet sheet = workbook.createSheet("excel字体样式");        HSSFCellStyle cellStyle = workbook.createCellStyle();        HSSFFont font = workbook.createFont();        // 字体加粗        font.setBold(true);        // 字体倾斜        font.setItalic(true);        // 字体删除线        font.setStrikeout(true);        // 字体颜色        font.setColor(IndexedColors.YELLOW.getIndex());        // 字体大小:字号        font.setFontHeightInPoints((short) 14);        // 设置行高        // font.setFontHeight((short) 14);        // 字体        font.setFontName("宋体");        cellStyle.setFont(font);        // 设置文字垂直居中        cellStyle.setAlignment(HorizontalAlignment.CENTER);        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);        // 设置单元格内容自动换行(文字超出列宽自动换行)        cellStyle.setWrapText(true);        HSSFRow row = sheet.createRow(0);        HSSFCell cell = row.createCell(0);        cell.setCellStyle(cellStyle);        cell.setCellValue("字体");        row.setHeight((short) (30 * 20));        sheet.setColumnWidth(0, 30 * 256 + 185);        FileOutputStream outputStream = new FileOutputStream("D:/temp/Excel字体样式.xlsx");        workbook.write(outputStream);        outputStream.close();        workbook.close();    }

image.pngimage.png

        public static void setRowHeightAndCellWidth() throws IOException {        HSSFWorkbook workbook = new HSSFWorkbook();        HSSFSheet sheet = workbook.createSheet("excel行高、列宽");        // 定义一个5行、5列的数据        int[][] data = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}, {21, 22, 23, 24, 25}};        for (int rowIndex = 0; rowIndex < data.length; rowIndex++) {            int[] cellData = data[rowIndex];            HSSFRow row = sheet.createRow(rowIndex);            // 行高计算方式:缇(twips) = 磅 * 20 ==> 换算 1磅=20缇            row.setHeight((short) (25 * 20));            for (int cellIndex = 0; cellIndex < cellData.length; cellIndex++) {                HSSFCell cell = row.createCell(cellIndex);                // 列宽计算方式:8磅 * 256 + 185                sheet.setColumnWidth(cellIndex, 8 * 256 + 185);                cell.setCellValue(cellData[cellIndex]);            }        }        FileOutputStream outputStream = new FileOutputStream("D:/temp/Excel行高、列宽.xlsx");        workbook.write(outputStream);        outputStream.close();        workbook.close();    }

image.png

        public static void setAllBorderStyle() throws IOException {        HSSFWorkbook workbook = new HSSFWorkbook();        HSSFSheet sheet = workbook.createSheet("excel单元格边框样式");        // ======================= 设置边框        int rowIndex = 0;        for (BorderStyle borderStyle : BorderStyle.values()) {            int cellIndex = 0;            HSSFRow row = sheet.createRow(rowIndex++);            row.setHeight((short) (35 * 20));            // 第一列            HSSFCell cell = row.createCell(cellIndex);            HSSFCellStyle topBorderStyle = workbook.createCellStyle();            // 上边框样式            topBorderStyle.setBorderTop(borderStyle);            cell.setCellValue("设置上边框(" + borderStyle.name() + ")");            cell.setCellStyle(topBorderStyle);            sheet.setColumnWidth(cellIndex, 35 * 256 + 185);            cellIndex += 2;            // 第三列            HSSFCell cell2 = row.createCell(cellIndex);            HSSFCellStyle bottomBorderStyle = workbook.createCellStyle();            // 下边框样式            bottomBorderStyle.setBorderBottom(borderStyle);            cell2.setCellValue("设置下边框(" + borderStyle.name() + ")");            cell2.setCellStyle(bottomBorderStyle);            sheet.setColumnWidth(cellIndex, 35 * 256 + 185);            cellIndex += 2;            // 第五列            HSSFCell cell3 = row.createCell(cellIndex);            HSSFCellStyle leftBorderStyle = workbook.createCellStyle();            // 左边框样式            leftBorderStyle.setBorderLeft(borderStyle);            cell3.setCellValue("设置左边框(" + borderStyle.name() + ")");            cell3.setCellStyle(leftBorderStyle);            sheet.setColumnWidth(cellIndex, 35 * 256 + 185);            cellIndex += 2;            // 第七列            HSSFCell cell4 = row.createCell(cellIndex);            HSSFCellStyle rightBorderStyle = workbook.createCellStyle();            // 左边框样式            rightBorderStyle.setBorderRight(borderStyle);            cell4.setCellValue("设置右边框(" + borderStyle.name() + ")");            cell4.setCellStyle(rightBorderStyle);            sheet.setColumnWidth(cellIndex, 35 * 256 + 185);        }        // ================= 设置边框并设置颜色        rowIndex += 2;        for (BorderStyle borderStyle : BorderStyle.values()) {            int cellIndex = 0;            HSSFRow row = sheet.createRow(rowIndex++);            row.setHeight((short) (35 * 20));            // 第一列            HSSFCell cell = row.createCell(cellIndex);            HSSFCellStyle topBorderStyle = workbook.createCellStyle();            // 上边框样式            topBorderStyle.setBorderTop(borderStyle);            // 上边框颜色            topBorderStyle.setTopBorderColor(IndexedColors.RED.getIndex());            cell.setCellValue("设置上边框(" + borderStyle.name() + ")");            cell.setCellStyle(topBorderStyle);            sheet.setColumnWidth(cellIndex, 35 * 256 + 185);            cellIndex += 2;            // 第三列            HSSFCell cell2 = row.createCell(cellIndex);            HSSFCellStyle bottomBorderStyle = workbook.createCellStyle();            // 下边框样式            bottomBorderStyle.setBorderBottom(borderStyle);            // 下边框颜色            bottomBorderStyle.setBottomBorderColor(IndexedColors.GREEN.getIndex());            cell2.setCellValue("设置下边框(" + borderStyle.name() + ")");            cell2.setCellStyle(bottomBorderStyle);            sheet.setColumnWidth(cellIndex, 35 * 256 + 185);            cellIndex += 2;            // 第五列            HSSFCell cell3 = row.createCell(cellIndex);            HSSFCellStyle leftBorderStyle = workbook.createCellStyle();            // 左边框样式            leftBorderStyle.setBorderLeft(borderStyle);            // 左边框颜色            leftBorderStyle.setLeftBorderColor(IndexedColors.YELLOW.getIndex());            cell3.setCellValue("设置左边框(" + borderStyle.name() + ")");            cell3.setCellStyle(leftBorderStyle);            sheet.setColumnWidth(cellIndex, 35 * 256 + 185);            cellIndex += 2;            // 第七列            HSSFCell cell4 = row.createCell(cellIndex);            HSSFCellStyle rightBorderStyle = workbook.createCellStyle();            // 左边框样式            rightBorderStyle.setBorderRight(borderStyle);            // 右边框颜色            rightBorderStyle.setRightBorderColor(IndexedColors.ORANGE.getIndex());            cell4.setCellValue("设置右边框(" + borderStyle.name() + ")");            cell4.setCellStyle(rightBorderStyle);            sheet.setColumnWidth(cellIndex, 35 * 256 + 185);        }        FileOutputStream outputStream = new FileOutputStream("D:/temp/Excel单元格边框样式.xlsx");        workbook.write(outputStream);        outputStream.close();        workbook.close();    }

边框样式对照表,括号内为BorderStyle枚举对象

在这里插入图片描述

1、关于列宽使用磅*20的计算方式

image.png

2、关于行高使用磅*256+185的计算方式

image.png

3、关于sheet.getLastRowNum()最终行数不正确问题

image.png
如果整个Excel中存在空行(整行空),当时若干空行下面存在其他数据,这时候获取到的最终行号就不对了,尤其是存在合并单元格的情况最容易出现这类问题。
image.png
很明显10、11、13、14全都是空行了,这时候的lastNum就是不正确的,这种情况要尤为注意。

避免这种情况的出现最直接的一种方式就是,预先知道数据存在多少行,先把所有行都生成sheet.createRow(0)。


同样地,空白的单元格也会出现这种情况,如果单元格不存在或没有样式,获取到的最后一个单元格列数也是不正确的。

4、IDEA中按住快捷键(Shift)+鼠标悬浮到对应单词可以查看颜色

在这里插入图片描述
在这里插入图片描述

像素、磅、点、缇等各种单位换算_点和像素换算_tanghuan的博客-CSDN博客
JAVA对excle创建、读取、设置单元格颜色、背景色、跨行跨列_java设置excel背景色_谷同学的博客-CSDN博客
POI4颜色名称,颜色汉语名称,颜色对应关系_软件工程师文艺的博客-CSDN博客
POI设置Excel单元格背景色(setFillForegroundColor与setFillPattern的使用) - 大墨垂杨 - 博客园
java用POI设置Excel的列宽_sheet.setcolumnwidth_duqian42707的博客-CSDN博客
Java POI 设置Excel单元格的宽度和高度_java poi 设置单元格宽度_aosica的博客-CSDN博客

来源地址:https://blog.csdn.net/dongzi_yu/article/details/131577857

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯