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;
}
相关推荐
咖啡八杯4 小时前
GoF设计模式——策略模式
java·后端·spring·设计模式
lizhongxuan5 小时前
AI Agent 上下文压缩利器 Headroom
后端
Csvn8 小时前
SSH 远程管理与安全加固 — 运维的守门之道
后端
IT_陈寒8 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
菜鸟谢9 小时前
Rust 智能指针完整详解
后端
菜鸟谢9 小时前
Rust 函数完整知识点详解
后端
爱勇宝10 小时前
淡泊名利之前,先承认我们都很焦虑
前端·后端·程序员
菜鸟谢10 小时前
Rust 闭包(Closure)完整详解
后端
ServBay10 小时前
如何利用本地技术栈构建 0 成本 AI SaaS 雏形
后端·aigc·ai编程
菜鸟谢10 小时前
Rust 集合 + 迭代器完整详解
后端