SpringBoot笔记

2023-10-27

目录

开发准备

导出

常用注解

导出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笔记 的相关文章

  • HTTP 状态 404 - 请求的资源不可用

    在使用 MyEclipse IDE 中的 Tomcat 服务器和 Struts 2 框架时 我遇到了反复出现的问题 我将我的程序作为服务器应用程序运行 当它运行时 默认的index jsp 文件将成功打开 但应用程序的其他过去都不起作用 当
  • Java 创建浮雕(红/蓝图像)

    我正在编写一个 Java 游戏引擎 http victoryengine org http victoryengine org 并且我一直在尝试生成具有深度的 3D 图像 您可以使用那些红色 蓝色眼镜看到 我正在使用 Java2D 进行图形
  • JTree 节点不会被直观地选择

    不知何故 我无法为我的 JTree 节点启用 选择突出显示 我正在我的项目中使用自定义单元格渲染器 这很可能导致此问题 这是完整的渲染器类代码 protected class ProfessionTreeCellRenderer exten
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • Java:从元素创建 DOM 元素,而不是文档

    如您所知 在 Java 中创建 Dom 元素的正确方法是执行以下操作 import org w3c dom Document import org w3c dom Element Document d Element e e d creat
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • 想要开发像 Facebook 这样的网站 - 处理数百万个请求 - 高性能 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想用 Java 开发一个像 Fac
  • 为什么 ConcurrentHashMap::putIfAbsent 比 ConcurrentHashMap::computeIfAbsent 更快?

    使用 ConcurrentHashMap 我发现computeIfAbsent 比putIfAbsent 慢两倍 这是简单的测试 import java util ArrayList import java util List import
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • 从 Stax XMLStreamReader 读取以解组部分

    我正在使用 Stax 游标 API 从大型 xml 文件中提取数据 当前 我转到特殊标签的开头并使用 JAXB 解组该标签 这对于格式良好的 xml 文件效果很好 但不久前我有一个文档 其中数十万个标签中有一个未关闭 JAXB 使用 XML
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • 我想要一个 Java 阿拉伯语词干分析器

    我正在寻找阿拉伯语的 Java 词干分析器 我找到了一个名为 AraMorph 的库 但它的输出是无法控制的 并且它会形成不需要的单词 还有其他阿拉伯语词干分析器吗 这是新的阿拉伯语词干分析器 Assem 的阿拉伯语轻词干分析器 http
  • Spock模拟inputStream导致无限循环

    我有一个代码 gridFSFile inputStream bytes 当我尝试这样测试时 given def inputStream Mock InputStream def gridFSDBFile Mock GridFSDBFile
  • Path2D 上的鼠标指针检测

    我构建了一个Path2D http docs oracle com javase 7 docs api java awt geom Path2D html表示由直线组成的未闭合形状 我希望能够检测何时单击鼠标并且鼠标指针靠近路径 在几个像素
  • 尝试使用带有有效购买令牌的 Java Google Play Developer API v3 检索应用内购买信息时出现错误请求(无效值)

    当使用 Java Google Play Developer API 版本 3 并请求有效购买令牌的购买信息时 我收到以下异常 API 调用返回 400 Bad Request 响应以及以下消息 code 400 errors domain

随机推荐

  • 幂等的这几个问题没有考虑到,你恐怕是在写Bug吧!

    免费视频福利推荐 2T免费学习视频 内含精选高频面试题 SSM Spring全家桶 微服务 MySQL MyCat 集群 分布式 高并发 中间件 Linux 网络 多线程 Jenkins Nexus Docker ELK等等免费学习视频 持
  • Python 操作MySql数据库(封装、优雅)

    Python 记录操作MySql数据库 封装 优雅 前言 封装代码 进行测试 结果展示 前言 学了pymysql第三方库 pip install pymysql 来操作MySql数据库后 浅记一下对MySql进行 关于我的MySql之优雅封
  • ValueError: shape mismatch: objects cannot be broadcast to a single shape 画条形图bar报错

    ValueError shape mismatch objects cannot be broadcast to a single shape plt bar x y 可能是条形图的x和y的数组长度不同造成的 需要修改数据 保持一致
  • 前端手机号码校验

    vue前端手机号码校验
  • zxing设置条码两边空白(EncodeHintType.MARGIN)无效的分析

    最新项目需要使用到zxing生成条码 条码格式为CODE128 CODE128的规则可参考 点击打开链接 当调用 MultiFormatWriter encode str BarcodeFormat CODE 128 mwidth mHei
  • 对CocosCreatorr的Draw call的理解

    Draw call比较直观的描述应该是 在CPU不改变渲染数据的情况下 openGL的一次渲染 opengGL的一次渲染 CPU调用图形绘制接口来使GPU执行渲染操作 渲染流程是CPU和GPU并行工作的过程 CPU和GPU之间通过一系列的缓
  • 小米便签开源项目本地环境搭建

    基于Android Studio 和Gradle 的小米便签配置和安装 一 Android Studio的中文社区 官网 下载最新的Android Studio 点击开始传送http www android studio org 可参考下文
  • 让异步的多个ajax顺序执行的方法

    就是说等第一个ajax传回来后再执行第二个ajax跟其他的js代码 ajax type POST url http xxx xxx aspx data success function msg 试了几次 除了在 那里 执行接下来的代码外 要
  • CSDN 编程竞赛第15期题解

    CSDN 编程竞赛第15期题解 1 求并集 由小到大输出两个单向有序链表的并集 如链表 A 1 gt 2 gt 5 gt 7 链表 B 3 gt 5 gt 7 gt 8 输出 1 gt 2 gt 3 gt 5 gt 7 gt 8 inclu
  • day01Git

    1 Git介绍 1 1版本控制 理解 无论是代码编写 还是文档编写 我们都会遇到对文档内容反复修改的情况 1 2开发中存在的问题 理解 程序员小明负责的模块就要完成了 就在即将提交发布之前的一瞬间 电脑突然蓝屏 硬盘光荣下岗 几个月来的努力
  • 【前端】Vue项目:旅游App-(16)home+hooks:窗口滚动到底部动态加载新数据、抽取到hook

    文章目录 目标 过程与代码 监听窗口的滚动 窗口上事件监听的移除 封装到一个hook 回调函数法 不推荐 返回值法 推荐 效果 总代码 修改或添加的文件 hooks的useScroll home content 参考 本项目博客总结 前端
  • C++QT入门

    C QT 文章目录 C QT 1 QT概述 1 1 什么是QT 1 2 QT的发展史 1 3 支持的平台 1 4 QT版本 1 5 Qt 的下载与安装 1 6 QT的优点 1 7 成功案例 2 创建QT项目 2 1 使用向导创建 2 2 手
  • vue2尚品汇学到得新知识

    vue滚动条 写到router路由中 回到最顶部 scrollBehavior to from savedPosition return y 0 2 引入一个模块后 先在路由router中 import然后再在注册路由写信息 path后看看
  • 【dev on wsl2】wsl2 with vscode简单配置

    wsl2 with vscode简单配置 正文开始 Assassin 目录 wsl2 with vscode简单配置 1 安装wsl2 1 1 安装方式选择 1 2 命令行安装 2 搭配vscode 2 1 新建用户 远程连接vscode
  • C++,类中的构造函数、拷贝构造函数、拷贝赋值函数、析构函数

    类的简介 类是一种将抽象转换为用户定义类型的C 工具 它将数据表示和操纵数据的方法组合成一个整洁的包 一般来说 类规范由两个部分组成 类声明 以数据成员 成员属性 的方式描述数据部分 以成员函数 被称为方法 的方式描述公有接口 类方法定义
  • element-ui嵌套弹框遮罩层解决

    1 element ui嵌套弹框遮罩层解决
  • QNX 如何制作目标系统,制作系统镜像,烧写系统文件

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额1元起步 多少随意 author 锋影 e mail 174176320 qq com 制作目标系统的方法如下 以CF卡为例 1 格式化CF卡 2 用dinit传系
  • JenKins + Svn + Maven 自动化构建部署

    也许很多小伙伴会疑问 什么是Jenkins Jenkins是一个功能强大的应用程序 允许持续集成和持续交付项目 无论用的是什么平台 这是一个免费的源代码 可以处理任何类型的构建或持续集成 集成Jenkins可以用于一些测试和部署技术 Jen
  • Python __name__属性和 dir() 函数

    name 属性 一个模块被另一个程序第一次引入时 其主程序将运行 如果我们想在模块被引入时 模块中的某一程序块不执行 我们可以用 name 属性来使该程序块仅在该模块自身运行时执行 if name main print 程序自身在运行 el
  • SpringBoot笔记

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