SpringBoot笔记

2023-11-07

目录

开发准备

导出

常用注解

导出excel到指定位置

导出excel到指定web

导入

将指定位置Excel导入并显示至web

 使用ExcelWriter基于模板导出


开发准备

1.导入依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.1</version>
</dependency>

实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {

    //生成表格时,次字段不生成
    @ExcelIgnore
    private String id;

    //定义表头名称及位置,value表示列名,0表示第一列
    @ExcelProperty(value = "姓名",index = 0)
    private String name;

    @ExcelProperty(value = "年龄",index = 1)
    private String age;

    @ColumnWidth(20)
    @ExcelProperty(value = "生日",index = 2)
    private String birthday;

}

数据源

@Component
public class StudentMapper {
    public List<Student> getStudents(){
        List<Student> studentList = new ArrayList<>();
        studentList.add(new Student("1","小明","16","1997-03-02"));
        studentList.add(new Student("2","小红","17","1993-03-02"));
        studentList.add(new Student("3","小东","18","1994-03-02"));
        return studentList;
    }
}

导出

常用注解

@ExcelProperty 列名,通过index属性指定位置

@ExcelIgnore 忽略该字段不进行导出

@DateTimeFormat 日期格式转换,String接收excel日期使用

@NumberFormat  数字格式转换 String接收excel数字格式使用

导出excel到指定位置

public static void export2File(String path, String excelName, String sheetName, Class clazz, List data){
    String fileName = path.concat(excelName).concat(ExcelTypeEnum.XLSX.getValue());
    EasyExcel.write(fileName,clazz).sheet(sheetName).doWrite(data);
}

参数说明:

export2File(path,"学生表","学生信息", Student.class,studentMapper.getStudents());

path:导出位置 如:"D:\\test11\\"

excelName:导出表格名字

sheetName:第一个sheet名字

clazz:导出数据对应的实体类

List data:导出数据源

导出excel到指定web

public static void export2Web(HttpServletResponse response,String excelName, String sheetName,Class clazz,List data) throws Exception{
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        //URLEncoder.encoder防止中文乱码
        excelName = URLEncoder.encode(excelName,"utf-8");
        response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
        EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(data);
    }

导入

将指定位置Excel导入并显示至web

   public static String export2Web4File(HttpServletResponse response, String path, String excelName) throws UnsupportedEncodingException {
        File file = new File(path.concat(excelName).concat(ExcelTypeEnum.XLSX.getValue()));
        if (!file.exists()) {
            return "文件不存在!";
        }

        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码
        excelName = URLEncoder.encode(excelName, "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());

        try (
                FileInputStream in = new FileInputStream(file);
                ServletOutputStream out = response.getOutputStream();
        ) {
            IOUtils.copy(in, out);
            return "导出成功!";
        } catch (Exception e) {
            log.error("导出文件异常:", e);
        }

        return "导出失败!";
    }

 使用ExcelWriter基于模板导出

private void export(List<DataVO> dataList) {
        ExcelWriter excelWriter = null;
        //获取项目resources/template目录下模板的数据流
        InputStream templateInputStream = null;

        //构建第一个sheet页的数据,根据模板填充
        Map<String, Object> sheetMap = new HashMap<>();
        //与模板对应字段-值设置
        sheetMap.put("data1", "测试数据1");
        sheetMap.put("data2", "测试数据2");
        sheetMap.put("data3", "测试数据3");
        String filePath = null;
        try {
            //获取项目resources/template目录下模板的数据流
            templateInputStream = new 
                ClassPathResource("template/data_template.xlsx").getInputStream();
            if (templateInputStream.available() == 0) {
                log.error("获取模板失败");
            }
            //设置文件名,filePath导出路径: 暂存java临时目录 最后再删除 "java.io.tmpdir"
            String fileName = "测试报告" + System.currentTimeMillis() + ".xlsx";
            String path = System.getProperty("java.io.tmpdir") + File.separator;
            String filePath = path + fileName;
            //ExcelWriter通过POI将值写入Excel
            excelWriter = EasyExcel.write(filePath).withTemplate(templateInputStream).build();
        // sheet-概览
        WriteSheet firstSheet = EasyExcel.writerSheet(0).build();
        //用数据去填充模板 取对应的值显示在模板对应的位置
        excelWriter.fill(sheetMap, firstSheet);

        //如果有第二页sheet 非模板 直接生成excel
        WriteSheet secondSheet = EasyExcel.writerSheet(1).head(DataVO.class).build();
        excelWriter.write(dataList, secondSheet );

        } catch (IOException e) {
            log.error("获取模板:examreport 失败。");
            e.printStackTrace();
        } finally {
            //最后记得关闭流
            excelWriter.finish();
            IOUtils.closeQuietly(templateInputStream);
            //删除临时文件
            if (null != filePath) {
                ExcelUtils.deleteFile(filePath);
            }
        }
}

@Data
@NoArgsConstructor
@AllArgsConstructor
public class DataVO{

    @ExcelProperty(value = "姓名")
    @ColumnWidth(value = 15)
    private String name;

    @ExcelProperty(value = "年龄")
    @ColumnWidth(value = 15)
    private String age;
}

模板文件data_template.xlsx 

用{}表示占位,数据根据map键值填充

 

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

SpringBoot笔记 的相关文章

随机推荐

  • HTML5 canvas标签-2 简单的3种滤镜

    在发现canvas有这么多功能后 我首先尝试着去做一些滤镜 最基本的就是胶片 这个在w3school上有demo 假设原本颜色为rgb r g b 只需要将它变成rgb 255 r 255 g 255 b 即可 原图处理后的 for var
  • Layui项目实战

    使用语言 C Js Html 使用框架 MVC Layui 使用插件 JQuery Layui 一 Layui父窗体前端代码 1 Html代码 div class layui col md12 style padding 8px div c
  • (Linux无线网卡WIFI上网 一 )USB-WIFI驱动移植

    导航 Linux无线网卡WIFI上网 一 USB WIFI驱动移植 Linux无线网卡WIFI上网 二 WPA SUPPLICANT Linux下的wifi管理工具移植 Linux无线网卡WIFI上网 三 嵌入式Linux下的WIFI使用
  • 常见十四种的Java算法

    一 简单列出常见的Java中14种算法 序号 简称 英文 简介 1 二分查找法 Binary Search 二分查找要求线性表必须采用顺序存储结构 而且表中元素按关键字有序排列 2 冒泡排序算法 Bubble Sort 它重复地走访过要排序
  • python搭建ip池

    在爬取网站的时候我们有时候会遭受封ip等显现 因此我们需要搭建自己的ip池用于爬虫 代码过程简述 1 爬取代理ip网站信息 2 将获取的信息处理得到ip等关键信息 3 保存首次获取的ip信息并检测其是否可用 4 检测完毕将可用ip保存 搭建
  • 操作系统重点_重点:运动系统

    操作系统重点 The Locomotion System for Unity has previously been briefly mentioned on this blog but this post will go more in
  • 前端自定义网页鼠标右键菜单

    监听全局上下文菜单 document addEventListener contextmenu function e 阻止默认 e preventDefault 自定义鼠标右键菜单栏 console log 鼠标右击
  • 高并发下的订单和库存处理

    介绍 前提 分布式系统 高并发场景 商品A只有100库存 现在有1000或者更多的用户购买 如何保证库存在高并发的场景下是安全的 预期结果 1 不超卖 2 不少卖 3 下单响应快 4 用户体验好 下单思路 下单时生成订单 减库存 同时记录库
  • IDEA-idea中解决Java程序包不存在问题

    新导入的JavaWeb项目在编译时报出Error 18 33 java 程序包com google common collect不存在的错误 看看这是什么东西 原来是google相关包 这个包的下载地址 https www mvnjar c
  • JavaWeb~网页刷新/前端构造HTTP请求(form表单、ajax异步构造)/同步与异步/封装ajax/jQuery库引入

    文本目录 网页刷新 网页前端构造HTTP请求 form表单构造 ajax构造各种请求 ajax介绍 什么是同步 异步请求 同步异步区别理解 什么情况下使用ajax ajax运行机制 代码举例 封装ajax方法 网页刷新 F5和ctrl f5
  • 最新PMP/PMBOK Guide 6th Edition项目管理知识体系指南中文第六版

    http www hellokittycn com chapter 1262
  • 多技术融合推动,元宇宙应用破局向前

    报告编委 黄勇 爱分析合伙人 首席分析师 文鸿伟 爱分析高级分析师 外部专家 按姓氏拼音排序 唐虓 艾迪普科技 融合创新中心总经理 特别鸣谢 按拼音排序 报告摘要 元宇宙作为下一代互联网的典型代表 很可能将是人类数字化生存的终极形态 将带来
  • RTT下移植LVGL到W601_文件系统移植

    RTT下移植LVGL到W601 显示驱动移植 声明 个人学习笔记 不保证正确 参考资料 移植参考 DFS参考 图片 图片在线转换 环境 win10 keil5 硬件 正点原子w601开发板 步骤流程 1 在显示驱动移植完成的基础上添加tf卡
  • 初次使用vscode配置方法

    从vs换到vscode 花了一天时间终于把各种问题解决 吐血整理 如有疑问 可以在评论区交流 1 安装c c 扩展 安装v1 8 4版 稳定 2 安装code runner 右键即可运行代码 操作简单 3 安装mingw 安装在线版会出现
  • 计算机视觉论文-2021-06-22

    本专栏是计算机视觉方向论文收集积累 时间 2021年6月22日 来源 paper digest 欢迎关注原创公众号 计算机视觉联盟 回复 西瓜书手推笔记 可获取我的机器学习纯手推笔记 直达笔记地址 机器学习手推笔记 GitHub地址 1 T
  • Mysql-DDL(数据定义语言)

    show databases 查看所有数据库 create databse 数据库名 创建数据库 use database 数据库名 使用数据库 删除表格如果存在 drop table if exists mumber1 create TA
  • Angular快速上手--创建Hero类

    0 前言 真实的英雄当然不止一个名字 在 src app 文件夹中为 Hero 类创建一个文件 并添加 id 和 name 属性 1 操作 src app app component ts复制并修改内容 export class Hero
  • ensp设计校园网,期末作业,课程设计报告

    1 实现功能 基本实现如下网络核心功能 1 三层架构设计 本课题按照三层网络结构 接入层 汇聚层 核心层 进行设计和规划 接入层要求提供较多的网络入口 汇聚层实现对接入层网络的互联 核心层完成校园内部和外部数据的交换 并实现路由和安全功能
  • 怎么查看vue源码

    有很多同学和我一样使用一段时间 vue 框架后 对它的源码就有了兴趣 但是不知道在哪里找 vue js 源码 随意创建一个vue项目 或者已有项目 找到根路径平级的 node modules 文件夹 往下拉 拉多一下 在文件夹尾巴一截的地方
  • SpringBoot笔记

    目录 开发准备 导出 常用注解 导出excel到指定位置 导出excel到指定web 导入 将指定位置Excel导入并显示至web 使用ExcelWriter基于模板导出 开发准备 1 导入依赖