Hutool工具类excel导出详细教程

2023-11-18

Hutool工具类excel导出

1-导入依赖

       <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.1.0</version>
        </dependency>

2-excel导出数据实体类



/**
 * @ClassName: ExcelData
 * @Description:
 * @Author: 
 * @Date: 
 **/
@Data
public class ExcelData {


    @ApiModelProperty("姓名")
    private String personName;

    @ApiModelProperty("性别")
    private String gender;


    @ApiModelProperty("年龄")
    private String age;


    @ApiModelProperty("身份证号")
    private String certificateNumber;



    @ApiModelProperty("身高")
    private Integer height;

    @ApiModelProperty("体重")
    private Double weight;

   



    public void setGender(String gender) {
        if(gender.equals("0")){
            this.gender="男";
        }else {
            this.gender="女";
        }
    }
}

@ApiModelProperty注解对应标题名称
3-创建Excel工具类

@Slf4j
public class ExportExcelUtil {

    public static void export(List<ExcelData> data, String path, String fileName, ExcelData excelData) throws IOException {
        log.info("开始导出");
        ExcelWriter writer = ExcelUtil.getWriter();
        List<Map> fieldAnnotation = getFieldAnnotation(excelData);
        for(Map<String,String> map:fieldAnnotation){
            for(String key:map.keySet()){
                String value = map.get(key);
                writer.addHeaderAlias(key,value);
            }
        }

        //第1列40px宽
        //writer.setColumnWidth(0, 40);
        //第2列15px 宽
        //writer.setColumnWidth(1, 15);



        //对齐方式,水平左对齐,垂直中间对齐
        writer.getStyleSet().setAlign(HorizontalAlignment.LEFT, VerticalAlignment.CENTER);

        //标题样式
        CellStyle headCellStyle = writer.getHeadCellStyle();
        //设置背景色
        headCellStyle.setFillForegroundColor(IndexedColors.WHITE1.getIndex());
        //必须设置 否则背景色不生效
        headCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

        //创建标题字体
        Font headFont = writer.createFont();
        headFont.setFontName("宋体");
        //大小
        headFont.setFontHeightInPoints((short) 11);
        //加粗
        headFont.setBold(true);
        headCellStyle.setFont(headFont);

        writer.setColumnWidth(-1, 30);
        writer.setRowHeight(-1,20);


        //保存路径
        FileOutputStream output = new FileOutputStream(path+fileName+".xls");
        // 一次性写出内容
        writer.write(data);

        //自适应列宽
        int columnCount = writer.getColumnCount();
        for (int i = 0; i < columnCount; ++i) {
            double width = SheetUtil.getColumnWidth(writer.getSheet(), i, false);
            if (width != -1.0D) {
                width *= 256.0D;
                //此处可以适当调整,调整列空白处宽度
                width += 220D;
                writer.setColumnWidth(i, Math.toIntExact(Math.round(width / 256D)));
            }
        }

        writer.flush(output,true);
        // 关闭writer,释放内存
        writer.close();
    }


    public static List<Map> getFieldAnnotation(Object object) {
        Field[] fields = object.getClass().getDeclaredFields();
        Map<String, String> resultMap = new HashMap();
        List<Map> list=new ArrayList<>();
        for (Field field : fields) {
            // 是否引用ApiModelProperty注解
            boolean bool = field.isAnnotationPresent(ApiModelProperty.class);
            if (bool) {
                resultMap = new HashMap();
                String value = field.getAnnotation(ApiModelProperty.class).value();
                resultMap.put(field.getName(), value);
                list.add(resultMap);
            }
        }
        return list;
    }

}

4-测试

public static void main(String[] args) {

        Date date=new Date();
        SimpleDateFormat format=new SimpleDateFormat("yyyyMMddHHmmss");
        String fileName = "测试"+format.format(date);
        try{
            //路径前端传入
            String path="D:\\文档\\导出\\";
            ExcelData excel=new ExcelData();
            excel.setPersonName("111");
            excel.setGender("女");
            excel.setHeight(178);
            excel.setWeight(158.52);
            excel.setCertificateNumber("320814145718185169");
            //数据库获取
            List<ExcelData> data=new ArrayList<>();
            data.add(excel);
            excel.setPersonName("222");
            excel.setGender("男");
            data.add(excel);
            ExcelData test=new ExcelData();
            ExportExcelUtil.export(data, path,fileName,test);
            System.out.println("数据导出成功!");
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("数据导出失败!");
        }
    }

5-部署
lunix中部署注意事项
查看安装字体
fc-list :lang=zh
没有则安装相对应字体
docker部署注意事项
1-在windows的字体文件复制到lunix中
电脑字体默认在“C:\Windows\Fonts”文件夹下。
2-修改DockerFile配置文件
在这里插入图片描述

我个人就是将字体文件放在font文件夹中,跟DockerFile文件同一路径

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hutool工具类excel导出详细教程 的相关文章

随机推荐

  • h5标签上实现文字空格

    在vue项目中实现文字之间的空格 div class top p class groupLeader 组 xa0 xa0 xa0 长 span xxx span p p class standingGroupLeader 副组长 span
  • [YOLO专题-23]:YOLO V5 - ultralytics代码解析-网络子结构详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122369993 目录 第1章 网络总
  • [QT编程系列-2]:C++图形用户界面编程,QT框架快速入门培训 - 1- 预备知识

    目录 概述 1 前置条件 1 1 C 1 2 图形界面 1 3 图形程序集成开发环境 1 4 图形程序开发框架 1 5 跨平台特性 1 6 QT快速感知 1 6 1 QT的典型应用 1 6 2 QT的特点 1 6 3 QT跨平台集成开发环境
  • Qt QProcess

    目录 概述 实 现 一 函数接口 二 执行命令 三 管 道 概述 本文介绍 在Linux环境下 使用Qt中的QProcess类执行shell命令并获取输出 头文件 include
  • 区块链数字签名详解

    有一点比较难以理解的答案就是 私钥加密公钥可以解密 公钥加密私钥可以解密 RSA的原理 两个大质数 p q 乘积 n 难以逆向求解 所以pq是对等的 公钥和私钥也是对等的 区块链 从数字货币到信用社会 读书笔记 这张图来自于新生大学的周兵
  • 【Vue项目实战】Vue3动画神操作!教你如何实现PPT一样的动画效果!

    文章目录 前言 一 Animate css是什么 二 安装和使用 1 安装 2 基本用法 3 JavaScript用法 三 动画制作 1 弹入动画 总结 前言 最近写界面的时候 发现一个前端组件很好玩 他就是鼎鼎大名的 Animate cs
  • 海康工业摄像头调用(linux基于python和opencv)

    1 下载官网客户端 其中包含SDK 官方网站 海康机器人 机器视觉 下载中心 安装deb文件 sudo dpkg i deb文件名 2 运行客户端 cd opt MVS bin MVS sh 如果连不上 看看是不是usb3 0的接口 3 调
  • ThinkPHP 日志信息泄露漏洞复现

    ThinkPHP 日志信息泄露漏洞复现 漏洞简介 ThinkPHP在开启DEBUG的情况下会在Runtime目录下生成日志 而且debug很多网站都没有关 ThinkPHP默认安装后 也会在Runtime目录下生成日志 THINKPHP3
  • 基于SSM 和 layui 的增删查改

    开发工具 IDEA 2021 WebStorm 2021 Mysql 8 0 开发环境 JDK 8 TomCat 8 5 81 apache maven 3 6 1 技术点 Spring SpringMVC Mybatis Mysql Ht
  • express使用简介

    框架搭建 1 安装脚手架 npm install g express generator 2 创建项目 express myapp 查看项目目录 可以知道启动文件www作用是提供http服务 express是一个全栈环境 所以有views
  • 维普期刊 瑞数5

    郑重声明 本项目的所有代码和相关文章 仅用于经验技术交流分享 禁止将相关技术应用到不正当途径 因为滥用技术产生的风险与本人无关 加载流程 url aHR0cDovL2xpYi5jcXZpcC5jb20vUWlrYW4vU2VhcmNoL0l
  • TCP/IP详解 卷1:协议 学习笔记 第十六章 BOOTP:引导程序协议

    一个无盘系统在不知道自身IP地址情况下 进行系统引导时能通过RARP协议获取它的IP地址 使用RARP会有两个问题 1 IP地址是返回的唯一结果 2 RARP使用链路层广播 RARP请求不会被路由器转发 每个实际网络必须设置一个RARP服务
  • leetcode算法面试题:打家劫舍问题

    题目 你是一个专业的小偷 计划偷窃沿街的房屋 每间房内都藏有一定的现金 影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统 如果两间相邻的房屋在同一晚上被小偷闯入 系统会自动报警 给定一个代表每个房屋存放金额的非负整数数组 计算你
  • 50个c/c++源代码网站

    C C 是最主要的编程语言 这里列出了50名优秀网站和网页清单 这些网站提供c c 源代码 这份清单提供了源代码的链接以及它们的小说明 我已尽力包括最佳的C C 源代码的网站 这不是一个完整的清单 您有建议可以联系我 我将欢迎您的建 议 以
  • Maven下载、安装和配置教程(2023年6月10日)

    Maven下载 安装和配置教程 2023年6月10日 一 下载安装包 二 安装 三 配置环境变量 系统是win10 四 验证是否安装成功 五 配置文件 六 idea里配置 一 下载安装包 链接 https pan baidu com s 1
  • 西部数据出现“WD SES Device USB Device”怎么办,而且说明书全是英文。

    您好 wd ses device driver这个驱动程序可以在baidu中输入关键词找到 什么驱动之家 驱动人生之类的专业驱动网站也都是有的 western digital的移动硬盘驱动程序安装步骤请见下图 转载于 https www c
  • glob.glob in python

    reference glob glob in python 功能 返回一个某一种文件夹下面的某一类型文件路径列表
  • Golang网络编程

    互联网协议介绍引入 1 物理层 Physical Layer 功能 物理层负责定义物理介质传输数据的方式和规范 它传输的是原始数据比特流 协议 Ethernet Wi Fi USB 光纤等 例子 将数据通过网线传输的过程类似于我们通过电话线
  • pytorch 使用BART模型进行中文自动摘要

    系列文章 如何从大型模型 BART fine tune一个小模型及代码实现 文本自动摘要评价方法 金字塔方法 pytorch 使用BART模型进行中文自动摘要 目录 系列文章 摘要 实现 数据准备 装载数据 预览数据 抽取部分模型 fine
  • Hutool工具类excel导出详细教程

    Hutool工具类excel导出 1 导入依赖