【EasyPoi实战系列】Spring Boot使用EasyPoi的注解让表格更漂亮以及图片的导出 - 第468篇

news/2024/4/20 13:42:45/文章来源:https://blog.csdn.net/linxingliang/article/details/130364472

历史文章(文章累计460+)

《国内最全的Spring Boot系列之一》

《国内最全的Spring Boot系列之二》

《国内最全的Spring Boot系列之三》

《国内最全的Spring Boot系列之四》

《国内最全的Spring Boot系列之五》

《国内最全的Spring Boot系列之六》

【EasyPoi实战系列】Spring Boot集成EasyPoi - 第467篇

ChatGPT应用场景实战,拥有ChatGPT等于拥有最强大脑 - 第6篇

文心一言 PK ChatGPT,二者究竟谁更胜一筹 - 第7篇

用Midjourney画个美女,AI绘画也太强大了!!! - 第8篇

悟纤:师傅,你有空吗?

师傅:有事找我?

悟纤:这不上一次留下的问题,还没解决吗。

师傅:瞧最近师傅忙的,都把这个事情忘记了。

悟纤:没事,重要的事情,徒儿都会记得。

师傅:那今天刚好有时间,就和你讲讲。

悟纤:好叻,时刻准备着学习。

导读

Hi,大家好,我是悟纤

我就是我,不一样的烟火。我就是我,与众不同的小苹果。

在前一小节,在Spring Boot中集成了EasyPoi,并且编写了一个导出Excel数据的例子:

数据是正常导出了,但导出的样式还是存在一些问题:

(1)姓名单元格都快把你我挤坏了。

(2)性别怎么能显示数字呢,不得显示对应的男/女吗?

(3)图片显示的地址问题也不大,但是产品还是希望能够显示为图片呢。

(4)出生日期格式也不友好呀。

一、@Excel

@Excel作用到filed上面,是对Excel一列的一个描述

1.1 width设置列宽

上面导出的表格,太挤,就是列宽的问题,设置一下属性width即可:

@Excel(name = "姓名",width = 15)private String realName;

此时导出的效果就会好很多。

对于手机号/邮箱/描述,显示不全,也是相同的问题,设置下width属性,效果如下:

1.2 format日期格式化

对于生成日期,看着这格式也没谁了,这个格式Mon Apr 24 16:36:34 CST 2023,领导看了肯定要挨骂了。对于格式可以通过属性format进行处理:

@Excel(name = "出生日期",format = "yyyy-MM-dd",width = 15)

导出看下效果,真的是beautiful:

现在定义的类型是Date类型,此时如果数据库定义的是一个String类型,而我们导出对象确实Date类型,这个怎么进行格式转换,很简单,只需要执行一个属性:

databaseFormat="yyyyMMddHHmmss";

导出时间设置,如果字段是Date类型则不需要设置 数据库如果是string 类型,这个需要设置这个数据库格式,用以转换时间格式输出。

1.3 replace类型转换

在上面的性别是数字0/1,但希望导出的结果是男/女。这个可以两个属性进行实现:

replace:值的替换 导出是{a_id,b_id} 导入反过来。

suffix:文字后缀,如% 90 变成90%。

@Excel(name = "性别",replace = { "男_1", "女_2" }, suffix = "生")private Integer sex;

到这里效果就几乎接近完美了:

二、图片的导出

图片的导出稍微复杂一丢丢,这里单独来说一下,主要有两种方式的图片的导出。

2.1 从file读取

@Excel(name = "头像地址",type = 2, imageType = 1,width = 40,height = 40)private String avatar;

type =2 该字段类型为图片,imageType=1 (默认可以不填),表示从file读取,字段类型是个字符串类型可以用相对路径也可以用绝对路径,绝对路径优先依次获取。

先使用绝对路径填充下数据:

users.add(new UserExportVO("悟纤",1,new Date(),"18688888888","1688@qq.com","/Users/linxiangxian/Downloads/001.jpg","公众号SpringBoot"));users.add(new UserExportVO("师傅",1,new Date(),"18666666666","1888@qq.com","/Users/linxiangxian/Downloads/001.jpg","公众号SpringBoot"));

导出结果excel表格显示为空白。

芭比Q了,这个真是有毒,后来发现是一个配置问题,找到工具类ExcelUtil,找到如下代码:

public static void exportExcelX(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName, HttpServletResponse response){    defaultExportX(list, pojoClass, fileName, response, new ExportParams(title, sheetName,ExcelType.XSSF));}

只需要将ExcelType.XSSF修改为ExcelType.HSSF即可。

HSSF:是操作Excel97-2003版本,扩展名为.xls。

XSSF:是操作Excel2007版本开始,扩展名为.xlsx。

SXSSF:是在XSSF基础上,POI3.8版本开始提供的一种支持低内存占用的操作方式,扩展名为.xlsx。

导出效果:

虽然导出正常了,但我就有点困惑了。XSSF是比较新的格式,HSSF是旧的格式,为什么写的这种写法不支持呢?

对于相对路径,有两种情况:

(1)使用了excel的模板文件:图片的相对路径是相对于Excel文件的路径,而不是相对于Spring Boot项目的路径或其他路径。也就是说,如果Excel文件和图片在同一目录下,则只需在Excel中指定图片的文件名即可。如果Excel和图片在不同的目录下,则应使用相对Excel文件路径的子路径指定图片路径。例如,如果Excel文件位于Spring Boot项目的src/main/resources/excel/目录下,图片位于src/main/resources/images/目录下,则应该在Excel文件中指定相对路径为../images/image.png。

(2)代码创建的excel模板文件:如果是在代码中创建Excel,相对路径指的是相对于当前正在执行代码的路径。如果代码中创建Excel文件并在其中插入图片,可以尝试在Java代码中使用相对路径指定图片的路径。

2.1 byte[]的方式

@Excel(name = "公司LOGO", type = 2,imageType = 2 ,width = 40 , height = 40)private byte[] avatar;

需要修改一下导出的逻辑的代码:

File picture = ResourceUtils.getFile("classpath:static/img/001.png");InputStream pictureStream = new FileInputStream(picture);byte[] bytes = IOUtils.toByteArray(pictureStream);users.add(new UserExportVO("悟纤",1,new Date(),"18688888888","1688@qq.com",bytes,"公众号SpringBoot"));users.add(new UserExportVO("师傅",1,new Date(),"18666666666","1888@qq.com",bytes,"公众号SpringBoot"));

通过org.apache.poi.util.IOUtils将InputStream转换为字节数组。

这里的话,读取的是resources/static/img下的图片资源,如果是网络资源的话,只要将网络资源的图片转换为字节数组,依然是可以导出的。

至此整个UserExportVO如下:

package com.example.demo.vo;import cn.afterturn.easypoi.excel.annotation.Excel;import lombok.AllArgsConstructor;import lombok.Data;import java.io.Serializable;import java.util.Date;/** * author:悟纤「公众号SpringBoot」 * date:2023/4/19 */@Data@AllArgsConstructorpublic class UserExportVO implements Serializable {    @Excel(name = "姓名",width = 15)    private String realName;    @Excel(name = "性别",replace = { "男_1", "女_2" }, suffix = "生")    private Integer sex;    @Excel(name = "出生日期",format = "yyyy-MM-dd",width = 15)    private Date birthday;    @Excel(name = "手机号码",width = 20)    private String phone;    @Excel(name = "邮箱",width = 20)    private String email;    //imageType=1:从file读取;imageType=2:从数据库中读取;默认是文件,同样导入也是一样的。//    @Excel(name = "头像地址",type = 2, imageType = 1,width = 40,height = 40)//    private String avatar;    @Excel(name = "公司LOGO", type = 2,imageType = 2 ,width = 40 , height = 40)    private byte[] avatar;    @Excel(name = "描述",width = 20)    private String remark;}

总结

本节和大家一起学习了注解@Excel的基本使用以及如何导出图片的相关操作。

(1)@Excel属性width:设置列宽。

(2)@Excel属性format:设置日期格式。

(3)@Excel属性replace:类型转换。

(4)@Excel属性type和imageType:图片导出的设置。

「关注我不迷路,带你探索新技术」

我是一名热爱技术、分享经验的 IT 从业者。如果您也热爱计算机、喜欢编程、探寻新技术,那么我们一定会成为好朋友!我的微信号是 [wuqian5268],如果你想随时和我交流、讨论技术或者了解我最新的项目和成果,请不要犹豫,立即扫码或者添加我吧!

我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。

à悟纤学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

ShardingJDBC分库分表:http://t.cn/A6ZarrqS

分布式事务解决方案:http://t.cn/A6ZaBnIr

JVM内存模型调优实战:http://t.cn/A6wWMVqG

Spring入门到精通:https://t.cn/A6bFcDh4

大话设计模式之爱你:https://dwz.cn/wqO0MAy7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103428.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行业分析| 视频监控——AI自动巡检

随着视频监控的普及&#xff0c;现在很多社区、工地、车间、厂区、超市、商铺、酒店、餐馆等场所都安装了视频监控系统。当安装的视频监控出现故障时&#xff0c;我们该如何进行简单的视频故障识别呢&#xff1f;如果只依靠人工对视频故障识别排查&#xff0c;工作量是相当大的…

Pytorch 入门资源(一) annaconda3下安装pytorch2.0.0和python3.11,使用Pycharm编辑器环境配置

一、环境安装 用annaconda3-2023.03-windows_x86_64&#xff0c;安装上python3.11和pytorch2.0.0环境。 下载pycharm community版本&#xff0c;将pycharm环境选择到pytorch&#xff0c;就可以开始上手Pytorch了。 指路几个安装博客&#xff1a; 【ok】Anaconda3的安装配置…

Three.js教程:Face3对象定义Geometry的三角形面

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 其他系列工具&#xff1a; NSDT简石数字孪生 Face3对象定义Geometry的三角形面 几何体Geometry的三角面属性geometry.faces和缓冲类型几何体BufferGeometry顶点索引属性BufferGeometry.index类似都是顶点位置数据的索引值…

TCP 协议的低效实现

包括 Linux kernel 在内的各种 TCP 实现均使用类似 skb 的对象管理一个个 packet&#xff0c;使 TCP 失去了 “流” 特征。应用通过 syscall 每写入一批数据&#xff0c;协议栈都可能生成一个 skb&#xff1a; ​ 仅管理这些 skb 就是一笔大开销。除了 skb 数据结构本身的 cru…

物联仓储系统ZigBee组网原理

在嵌入式项目物联仓储系统中&#xff0c;使用cortexM0模拟仓库&#xff0c;cortex-A9模拟服务器&#xff0c;两块开发板之间使用ZigBee技术实现数据接收和发送&#xff0c;本文就介绍一下ZigBee组网的原理和相关步骤。 1.组网概述 组建一个完整的zigbee网状网络包括两个步骤&am…

《低代码PaaS驱动集团企业数字化创新白皮书》-未来展望

未来展望 低代码PaaS发展的机遇 低代码开发可以帮助企业灵活搭建数字化应用&#xff0c;满足企业各业务部门的个性化、碎片化需求。根据IDC调研结果显示&#xff0c;当前低代码开发主要应用于面向企业内部的应用&#xff0c;占该应用总量的比例达到 11.6%&#xff1b;其次是面…

android studio EditText用法

1.自定义文本框 选中状态&#xff1a; <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"><!--指定形状内部颜色--><solid android:color"#ffffff"&g…

Databend 开源周报第 90 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 元数据优化 最…

Leetcodes刷题之删除链表的倒数N个结点和删除链表的中间的结点

吾心信其可行&#xff0c;则移山填海之难&#xff0c;终有成功之日。 --孙中山 目录 &#x1f349;一.删除链表的倒数N个结点 &#x1f33b;1.双指针 &#x1f341;2.求链表的长度 &#x1f338;二.删除链表的中间的结点 &#x1f349;一.删除链…

2023全球运维大会 | 智能运维中的数据管理和数据探索

GOPS 全球运维大会由高效运维社区&#xff08;GreatOPS&#xff09;、开放运维联盟&#xff08;OOPSA&#xff09;和 DevOps 时代社区联合主办&#xff0c;指导单位为云计算开源产业联盟、FinOps产业推进方阵。迄今为止&#xff0c;GOPS 已经举行了十九次&#xff0c;大会参会嘉…

后代选择器

知识点&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" c…

管理后台项目-06-用户管理角色管理模块

目录 1-路由信息搭建和api文件信息创建 2-用户管理模块 2.1-列表数据获取以及动态渲染 2.2-添加 | 修改 用户 2.3-删除-批量删除用户 2.4-分配角色 3-角色管理 3.1-修改角色 3.2-分配权限 1-路由信息搭建和api文件信息创建 我们先进行路由菜单的配置&#xff0c;在系统…

ambari的kafka服务开启sasl

添加 sasl 配置⽂件 集群部署 Kafka2.2下载地址 http://archive.apache.org/dist/kafka/2.2.1/kafka_2.11-2.2.1.tgz 解压安装包 tar -zxvf kafka_2.11-2.2.1.tgz 部署略 ambari 数据kafka服务 在kafka的conf目录下创建sasl_conf目录,将kafka_client_jaas.conf/kafka_se…

如何保护数据安全?企业该从部署SSL证书开始

数字化时代&#xff0c;大数据开始蔓延到各行各业&#xff0c;影响着生活的方方面面。在犹如“皇帝穿新衣”般透明的大数据时代&#xff0c;数据泄露无孔不入&#xff0c;存在问题层出不穷&#xff0c;未知的漏洞隐患、安全边界的模糊、新的网络攻击手段、个人隐私的无处藏身等…

Zynq-7000、国产zynq-7000的GPIO控制(二)

本文详细说明一下使用SDK中使用MIO/EMIO作为输入中断 SDK中使用MIO/EMIO作为输入中断 这个使用场景可以扩展到PL的可以通过EMIO或者MIO&#xff0c;告知PS中断来了&#xff0c;需要PS处理一些特定事物&#xff0c;当然也可以连接最简单的按键。 这个可以参考SDK自带例程来实…

2022年NOC大赛创客智慧编程赛道图形化scratch复赛题,包含答案解析

目录 2022 年 NOC 大赛创客智慧编程图形化复赛用题 下载文档打印做题:

太阳辐射预报模式WRF-SOLAR在农业生态领域中的实践技术应用

太阳能是一种清洁能源&#xff0c;合理有效开发太阳能资源对减少污染、保护环境以及应对气候变化和能源安全具有非常重要的实际意义&#xff0c;为了实现能源和环境的可持续发展&#xff0c;近年来世界各国都高度重视太阳能资源的开发利用&#xff1b;另外太阳辐射的光谱成分、…

这场SIG组开放工作会议为何吸引了那么多人的关注?

【中国&#xff0c;上海&#xff0c;2023年4月20日-21日】openEuler Developer Day 2023在线上和线下同步举办。本次大会由开放原子开源基金会指导&#xff0c;中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办&#xff0c;以“万涓汇流&#xff0c;奔涌向前”为主题…

为什么软件测试外包公司更受软件企业欢迎?软件测试报告需要多少钱?

劳动派遣或劳务派遣的用工模式古已有之&#xff0c;是人力资源销售市场不可避免的态势。软件测试顺应时代开展检测业务外包这一行业细分领域&#xff0c;越来越多软件外包公司尤其是小微型企业慢慢意识到了软件测试业务外包通常能够持续减少企业的各种成本费&#xff0c;使企业…

关于Vue中使用全屏容器无法占满屏幕以及样式不生效问题解决方案

先来看示例问题 App.vue文件 global.css文件 网页效果 可以看到即使设置了宽度和高度为100%都无法占满屏幕&#xff0c;而且容器还超出了屏幕&#xff0c;上拉才可以看到下边框。查看网上解决方法&#xff1a; 1.height设置为100vh&#xff0c; 或者设置为calc&#xff08;10…