ExcelUtils样式相关工具

建议把样式相关工具统一放到 ExcelUtils 中的一个区域,例如:

arduino 复制代码
// =========================
// Style 工具
// =========================

下面是整理后的完整版(带详细注释和参数说明)。


创建居中样式

java 复制代码
/**
 * 创建居中样式
 *
 * 功能:
 * 1. 水平居中
 * 2. 垂直居中
 *
 * @param workbook 工作簿
 * @return CellStyle
 */
public static CellStyle createCenterStyle(
        Workbook workbook) {

    CellStyle style =
            workbook.createCellStyle();

    // 水平居中
    style.setAlignment(
            HorizontalAlignment.CENTER
    );

    // 垂直居中
    style.setVerticalAlignment(
            VerticalAlignment.CENTER
    );

    return style;
}

创建边框样式

scss 复制代码
/**
 * 创建边框样式
 *
 * 功能:
 * 给单元格增加四周边框
 *
 * @param workbook 工作簿
 * @return CellStyle
 */
public static CellStyle createBorderStyle(
        Workbook workbook) {

    CellStyle style =
            workbook.createCellStyle();

    style.setBorderTop(
            BorderStyle.THIN);

    style.setBorderBottom(
            BorderStyle.THIN);

    style.setBorderLeft(
            BorderStyle.THIN);

    style.setBorderRight(
            BorderStyle.THIN);

    return style;
}

创建标题样式

scss 复制代码
/**
 * 创建标题样式
 *
 * 示例:
 * 考勤统计表
 *
 * @param workbook 工作簿
 * @return CellStyle
 */
public static CellStyle createTitleStyle(
        Workbook workbook) {

    CellStyle style =
            workbook.createCellStyle();

    Font font =
            workbook.createFont();

    // 粗体
    font.setBold(true);

    // 字体大小
    font.setFontHeightInPoints(
            (short) 16
    );

    style.setFont(font);

    // 居中
    style.setAlignment(
            HorizontalAlignment.CENTER
    );

    style.setVerticalAlignment(
            VerticalAlignment.CENTER
    );

    return style;
}

创建表头样式

scss 复制代码
/**
 * 创建表头样式
 *
 * 功能:
 * 适用于第一行表头
 *
 * @param workbook 工作簿
 * @return CellStyle
 */
public static CellStyle createHeaderStyle(
        Workbook workbook) {

    CellStyle style =
            workbook.createCellStyle();

    Font font =
            workbook.createFont();

    font.setBold(true);

    style.setFont(font);

    style.setAlignment(
            HorizontalAlignment.CENTER
    );

    style.setVerticalAlignment(
            VerticalAlignment.CENTER
    );

    style.setBorderTop(
            BorderStyle.THIN);

    style.setBorderBottom(
            BorderStyle.THIN);

    style.setBorderLeft(
            BorderStyle.THIN);

    style.setBorderRight(
            BorderStyle.THIN);

    return style;
}

自动换行

java 复制代码
/**
 * 自动换行样式
 *
 * 示例:
 * 第一行
 * 第二行
 *
 * @param workbook 工作簿
 * @return CellStyle
 */
public static CellStyle createWrapStyle(
        Workbook workbook) {

    CellStyle style =
            workbook.createCellStyle();

    style.setWrapText(true);

    return style;
}

竖向文字

java 复制代码
/**
 * 创建竖向文字样式
 *
 * 示例:
 * 考
 * 勤
 * 统
 * 计
 *
 * @param workbook 工作簿
 * @return CellStyle
 */
public static CellStyle createVerticalTextStyle(
        Workbook workbook) {

    CellStyle style =
            workbook.createCellStyle();

    // 旋转90度
    style.setRotation(
            (short) 90
    );

    style.setAlignment(
            HorizontalAlignment.CENTER
    );

    style.setVerticalAlignment(
            VerticalAlignment.CENTER
    );

    return style;
}

红色字体

scss 复制代码
/**
 * 红色字体样式
 *
 * 适用于:
 * 迟到
 * 缺卡
 * 旷工
 *
 * @param workbook 工作簿
 * @return CellStyle
 */
public static CellStyle createRedFontStyle(
        Workbook workbook) {

    CellStyle style =
            workbook.createCellStyle();

    Font font =
            workbook.createFont();

    font.setColor(
            IndexedColors.RED.getIndex()
    );

    style.setFont(font);

    return style;
}

日期格式

java 复制代码
/**
 * 日期格式
 *
 * yyyy-MM-dd
 *
 * @param workbook 工作簿
 * @return CellStyle
 */
public static CellStyle createDateStyle(
        Workbook workbook) {

    CellStyle style =
            workbook.createCellStyle();

    DataFormat format =
            workbook.createDataFormat();

    style.setDataFormat(
            format.getFormat(
                    "yyyy-MM-dd"
            )
    );

    return style;
}

时间格式

java 复制代码
/**
 * 时间格式
 *
 * HH:mm:ss
 *
 * @param workbook 工作簿
 * @return CellStyle
 */
public static CellStyle createTimeStyle(
        Workbook workbook) {

    CellStyle style =
            workbook.createCellStyle();

    DataFormat format =
            workbook.createDataFormat();

    style.setDataFormat(
            format.getFormat(
                    "HH:mm:ss"
            )
    );

    return style;
}

百分比格式

java 复制代码
/**
 * 百分比格式
 *
 * 12.35%
 *
 * @param workbook 工作簿
 * @return CellStyle
 */
public static CellStyle createPercentStyle(
        Workbook workbook) {

    CellStyle style =
            workbook.createCellStyle();

    DataFormat format =
            workbook.createDataFormat();

    style.setDataFormat(
            format.getFormat(
                    "0.00%"
            )
    );

    return style;
}

金额格式

ini 复制代码
/**
 * 金额格式
 *
 * 1,999.00
 *
 * @param workbook 工作簿
 * @return CellStyle
 */
public static CellStyle createMoneyStyle(
        Workbook workbook) {

    CellStyle style =
            workbook.createCellStyle();

    DataFormat format =
            workbook.createDataFormat();

    style.setDataFormat(
            format.getFormat(
                    "#,##0.00"
            )
    );

    return style;
}

背景色

java 复制代码
/**
 * 创建背景色样式
 *
 * @param workbook 工作簿
 * @param color 背景颜色
 *              示例:
 *              IndexedColors.YELLOW
 *              IndexedColors.GREEN
 *              IndexedColors.RED
 *
 * @return CellStyle
 */
public static CellStyle createBackgroundStyle(
        Workbook workbook,
        IndexedColors color) {

    CellStyle style =
            workbook.createCellStyle();

    style.setFillForegroundColor(
            color.getIndex()
    );

    style.setFillPattern(
            FillPatternType.SOLID_FOREGROUND
    );

    return style;
}

冻结表头

typescript 复制代码
/**
 * 冻结首行
 *
 * 效果:
 * 下拉时表头固定
 *
 * @param sheet Sheet
 */
public static void freezeHeader(
        Sheet sheet) {

    sheet.createFreezePane(
            0,
            1
    );
}

自动列宽

arduino 复制代码
/**
 * 自动列宽
 *
 * @param sheet Sheet
 * @param columnCount 列数量
 */
public static void autoSizeColumns(
        Sheet sheet,
        int columnCount) {

    for (int i = 0;
         i < columnCount;
         i++) {

        sheet.autoSizeColumn(i);

        int width =
                sheet.getColumnWidth(i);

        sheet.setColumnWidth(
                i,
                Math.min(
                        width + 1000,
                        255 * 256
                )
        );
    }
}

设置下拉框

需要额外导入:

arduino 复制代码
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationHelper;
java 复制代码
/**
 * 添加下拉框
 *
 * @param sheet Sheet
 * @param values 下拉数据
 * @param firstRow 开始行
 * @param lastRow 结束行
 * @param col 列号
 */
public static void addDropDownList(
        Sheet sheet,
        String[] values,
        int firstRow,
        int lastRow,
        int col) {

    DataValidationHelper helper =
            sheet.getDataValidationHelper();

    DataValidationConstraint constraint =
            helper.createExplicitListConstraint(
                    values
            );

    CellRangeAddressList addressList =
            new CellRangeAddressList(
                    firstRow,
                    lastRow,
                    col,
                    col
            );

    DataValidation validation =
            helper.createValidation(
                    constraint,
                    addressList
            );

    sheet.addValidationData(
            validation
    );
}

插入图片

ini 复制代码
/**
 * 插入图片
 *
 * @param workbook 工作簿
 * @param sheet Sheet
 * @param imageBytes 图片字节数组
 * @param row 行号
 * @param col 列号
 */
public static void insertImage(
        Workbook workbook,
        Sheet sheet,
        byte[] imageBytes,
        int row,
        int col) {

    int pictureIdx =
            workbook.addPicture(
                    imageBytes,
                    Workbook.PICTURE_TYPE_PNG
            );

    Drawing<?> drawing =
            sheet.createDrawingPatriarch();

    CreationHelper helper =
            workbook.getCreationHelper();

    ClientAnchor anchor =
            helper.createClientAnchor();

    anchor.setRow1(row);
    anchor.setCol1(col);

    Picture picture =
            drawing.createPicture(
                    anchor,
                    pictureIdx
            );

    picture.resize();
}

批量设置整行样式

typescript 复制代码
/**
 * 设置整行样式
 *
 * @param row 行
 * @param style 样式
 */
public static void setRowStyle(
        Row row,
        CellStyle style) {

    for (Cell cell : row) {

        cell.setCellStyle(
                style
        );
    }
}

复制单元格样式(非常实用)

java 复制代码
/**
 * 复制样式
 *
 * @param workbook 工作簿
 * @param source 源样式
 * @return 新样式
 */
public static CellStyle cloneStyle(
        Workbook workbook,
        CellStyle source) {

    CellStyle style =
            workbook.createCellStyle();

    style.cloneStyleFrom(
            source
    );

    return style;
}
相关推荐
jsl_jsl_jsl41 分钟前
☕ Java 高并发进阶(三):Java 锁体系全景解析——从 Synchronized 到 AQS 高阶锁
java
love_muming41 分钟前
从 ArrayList 到 LinkedList:Java 集合中数组与链表的深度对比
java·数据结构·链表
用户6081865279042 分钟前
阿里云OSS工具类完整设计与实现:基于.NET的静态单例模式实践
后端
Gopher_HBo43 分钟前
存储层技术MySQL
后端
槑有老呆44 分钟前
从零搭建 AIGC 工程:后端项目初始化到 API 调用的完整实践
后端
荣码44 分钟前
Java后端用LangChain搭大模型应用,我踩了5个坑
java
Code_Artist1 小时前
盘点Redis的常见使用场景,拜托不要再只会Get&Set一坨数据啦!
redis·后端·面试
咕咚咚1 小时前
【线上问题处理】JSONNull导致的接口500
后端
JAVA9651 小时前
JAVA面试-并发篇 04-synchronized和ReentrantLock 的区别是什么
java·面试