hutool ExcelUtil导出excel二级表头

简介:Hutool是一款十分好用的开发工具集,里面包含了大部分日常开发常用的工具,使用简单方便,可以大大提升日常开发效率,十分推荐大家使用。这里简单总结一下基于Hutool的Excel使用。

一、Hutool依赖

java 复制代码
    <!-- Excel导出、导入-->
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.8.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.0.0</version>
    </dependency>
java 复制代码
public static void main(String[] args) {
    ExcelWriter writer = null;

    try {

        writer = ExcelUtil.getWriter(true);

        // 标题
        writer.merge(0, 1, 0, 0, "序号", true);
        writer.merge(0, 1, 1, 1, "合同编号", true);
        writer.merge(0, 1, 2, 2, "合同名称", true);
        writer.merge(0, 1, 3, 3, "承包商", true);
        writer.merge(0, 0, 4, 5, "合同投资", true);
        writer.merge(0, 1, 6, 6, "动态投资", true);
        writer.merge(0, 1, 7, 7, "估算投资", true);
        writer.merge(0, 1, 8, 8, "概算投资", true);
        writer.merge(0, 0, 9, 10, "工程预算", true);
        writer.merge(0, 0, 11, 12, "工程结(决)算", true);
        writer.merge(0, 0, 13, 14, "工程审计金额", true);
        writer.writeCellValue(4, 1, "总投资");
        // 设置单元格为表头默认样式,不设置当前单元格样式会与表头不一致
        writer.setStyle(StyleUtil.createHeadCellStyle(writer.getWorkbook()), 4, 1);
        writer.writeCellValue(5, 1, "暂定金额");
        writer.setStyle(StyleUtil.createHeadCellStyle(writer.getWorkbook()), 5, 1);
        writer.writeCellValue(9, 1, "工程预算");
        writer.setStyle(StyleUtil.createHeadCellStyle(writer.getWorkbook()), 9, 1);
        writer.writeCellValue(10, 1, "招标控制价");
        writer.setStyle(StyleUtil.createHeadCellStyle(writer.getWorkbook()), 10, 1);
        writer.writeCellValue(11, 1, "结算金额");
        writer.setStyle(StyleUtil.createHeadCellStyle(writer.getWorkbook()), 11, 1);
        writer.writeCellValue(12, 1, "决算金额");
        writer.setStyle(StyleUtil.createHeadCellStyle(writer.getWorkbook()), 12, 1);
        writer.writeCellValue(13, 1, "结算审计");
        writer.setStyle(StyleUtil.createHeadCellStyle(writer.getWorkbook()), 13, 1);
        writer.writeCellValue(14, 1, "决算审计");
        writer.setStyle(StyleUtil.createHeadCellStyle(writer.getWorkbook()), 14, 1);

        writer.passCurrentRow();
        writer.passCurrentRow();
        List<String> row1 = CollUtil.newArrayList("一","","建安投资","承包商1","23","30","54.2","23","22","33","124","203","345","55","5555");
        List<String> row2 = CollUtil.newArrayList("二","","建安投资","承包商1","23","30","54.2","23","22","33","124","203","345","55","5555");
        List<List<String>> rows2 = CollUtil.newArrayList(row1,row2);
        writer.write(rows2, false);
        // 写出流
        writer.flush(new FileOutputStream(new File("d:/复杂表头.xlsx")));

    } catch (Exception e) {

    } finally {
        if (writer != null) {
            writer.close();
        }
    }
}
相关推荐
实点科技17 分钟前
实点科技IO-Link I/O IOL7A/B系列参数配置方法介绍
网络
梦帮科技1 小时前
LoRA / QLoRA 低秩矩阵流形更新:SVD 分解、秩与缩放因子 α 的物理意义与梯度稳定性保障
网络·深度学习·神经网络·线性代数·矩阵·架构·数据挖掘
阿钱真强道2 小时前
28 嵌入式操作系统 | 网关加 TCP 命令通道:粘包/半包怎么切
网络·网络协议·tcp/ip·粘包
HY小宝F2 小时前
树莓派智能摄像头系统 30 天重学计划之 Day 03 · 网络基础:建立“包“的思维 —— 学习总结
网络·学习
ayaya_mana2 小时前
MCTier 组网联机工具:安装、配置与私有化部署
网络·windows·内网穿透·联机
故七月2 小时前
GEO 信源评估体系:如何判断一条网页信源能否被大模型采信
前端·网络·人工智能
hasty2 小时前
一次 WebSocket 握手为何能终止进程?Undici CVE-2026-19534 的异常边界
网络·websocket·网络协议
C++ 老炮儿的技术栈3 小时前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
实点科技3 小时前
XB6S-EI2002如何与信捷XDH-60T4-E实现EtherNet/IP通讯?
网络
仍然.3 小时前
RabbitMQ---可靠性传输
网络·分布式·rabbitmq