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

news2024/11/26 6:01:45

历史文章(文章累计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.coloradmin.cn/o/459737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用电脑和手机MT4平台软件设置报警功能的方法及步骤

使用MT4&#xff08;MetaTrader 4&#xff09;的报警功能&#xff0c;就可以在汇率达到指定数值&#xff0c;或者是在EA进场买进或结束交易的时候在手机接受推播通知。即使正在外出&#xff0c;也不会因此而错失机会&#xff0c;也可以借此确认进场交易内容&#xff0c;是相当便…

部署CDN的网站如何找真实IP

部署CDN的网站找真实IP 1.概述 目前很多网站使用了cdn服务&#xff0c;用了此服务 可以隐藏服务器的真实IP&#xff0c;加速网站静态文件的访问&#xff0c;而且你请求网站服务时&#xff0c;cdn服务会根据你所在的地区&#xff0c;选择合适的线路给予你访问&#xff0c;由此达…

黑盒测试过程中【测试方法】详解2-正交实验

在黑盒测试过程中&#xff0c;有9种常用的方法&#xff1a;1.等价类划分 2.边界值分析 3.判定表法 4.正交实验法 5.流程图分析 6.因果图法 7.输入域覆盖法 8.输出域覆盖法 9.猜错法 前面我们已经讲解过了等价类划分、边界值、判定表。 可以参考我之前的文章&#xff…

k8s部署Pyroscope并分析golang性能瓶颈

Pyroscope是什么 Pyroscope是一种开源的应用程序性能分析工具&#xff0c;它可以帮助我们发现和解决应用中的性能问题。Pyroscope支持多种编程语言并提供了丰富的性能数据&#xff0c;可以帮助我们跟踪应用程序的执行情况&#xff0c;并根据收集到的数据来识别性能瓶颈。 Pyros…

什么是VBST和PVST?两者有啥区别?

在计算机网络中&#xff0c;VLAN&#xff08;Virtual Local Area Network&#xff0c;虚拟局域网&#xff09;是一种将局域网划分为多个逻辑上独立的子网的技术&#xff0c;它可以帮助网络管理员更好地管理网络资源。 在VLAN技术中&#xff0c;STP&#xff08;Spanning Tree P…

Git 如何修改历史的 Commit message

目录 修改最近一条Commit 修改过去若干条 Commit 场景&#xff1a;当分批次多次提交时&#xff0c;突然发现提交的message不符合规范&#xff0c;想要修改&#xff0c;这时就可以使用了 修改最近一条Commit 如果只是想修最近一条 Commit, 直接使用命令: git commit --amen…

基于DistFlow方程求解给定的通用径向单相配电网络的配电功率流方程(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 本文介绍了基于DistFlow方程求解给定的通用径向单相配电网络的配电功率流方程及结果展示。 &#x1f4da;2 运行结果 主函数部…

JVM垃圾回收机制和常见算法

GC回收垃圾流程第一步是定位内存空间中没有引用到的对象&#xff0c;然后才能进行回收。那么GC是如何定位这些内存中没有用到的对象呢&#xff1f; 一、引用计数器算法&#xff08;废弃&#xff09; 引用计数器算法是给每一个对象设置一个计数器&#xff0c;当有地方引用这个对…

Linux入门操作

pwd 查看当前目录 与 自动补全 文件详情 drwxrwxr-x d代表文件夹 -代表文件 其中rwx rwx r-x r是可读 w是可写 x 执行 第一组&#xff08;前三个&#xff09;指文件拥有者的权限 第二组&#xff08;中三个&#xff09;代表文件拥有的组的权限 第三组&#xff08;后三个&am…

5.2.1二叉树的定义和基本术语

二叉树的基本概念&#xff1a; 二叉树是递归定义的二叉树 下面我们来看几个特殊的二叉树&#xff1a; 特点&#xff1a; 1&#xff09;只有最后一层有叶子节点 2&#xff09;不存在度为1的结点 3&#xff09;按层序从1开始编号&#xff0c;结点i的左孩子为2i&#xff0c;右孩…

three.js地图可视化项目-广州模型

概述 如有不明白的可以加QQ&#xff1a;2354528292&#xff1b;wx: aichitudousien 更多教学视频请访问&#xff1a;https://space.bilibili.com/236087412 详细教学请到上方视频链接访问&#xff0c;总共3个多小时的教学~ three.js地图可视化项目-广州模型 搭建开发环境 使用…

Tomcat的概念、部署、及优化

一、Tomcat概述 1、Tomcat的概念 Tomcat是Java语言开发的&#xff0c;服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP程序的首选。一般来说&am…

金陵科技学院五年一贯制专转本旅游学概论考试大纲

金陵科技学院五年一贯制专转本旅游学概论考试大纲 一、考核对象 本课程的考核对象为五年一贯制高职专转本“旅游管理”专业入学考试考生。 二、考核方式 本课程考核采用闭卷笔试的方式。 三、命题依据及原则 1、命题依据 参考书目&#xff1a;《旅游学概论》(第七版) 李…

【Git 入门教程】第一节、什么是Git?

在软件开发中&#xff0c;代码的管理和版本控制非常重要。为了更好地管理代码&#xff0c;需要使用一种有效的工具来保证代码的质量和稳定性。而Git正是这样一种工具。 一、概念 Git是一种分布式版本控制系统&#xff0c;它可以追踪文件的变化&#xff0c;并且可以协同工作。它…

SpringBoot——MyBatis-Plus源码分析及开发实践详解

focus w x&#xff1a;CodingTechWork 文章目录 focus w x&#xff1a;CodingTechWork 引言MyBatis-Plus 介绍概述特点常用注解TableNameTableIdIdType类型 TableField MyBatis-Plus 源码分析IService原生CURD接口savesaveorUpdateremoveupdategetlistpage Mapper原生CURD接口i…

抚仙湖,一个亦梦亦幻的地方,这个五一节,我们骑友′的诗和远方

云南省玉溪市抚仙湖是中国南方最大的深水型淡水湖泊之一&#xff0c;位于云南省中部&#xff0c;距离昆明市约80公里。抚仙湖的面积约为212平方公里&#xff0c;平均水深约为120米&#xff0c;最大水深可达157米。 抚仙湖最美的景点有很多&#xff0c;其中最著名的是以下几个&a…

2023年五月份图形化二级打卡试题

活动时间 从2023年5月1日至5月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…

深度学习技巧应用9-模型训练中学习率的调整和假数据生成技巧与总结

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用9-模型训练中学习率的调整和假数据生成技巧与总结,我们在训练模型的时候,为了测试模型是否可以行,但是目前还没有标注好大量的数据,在缺乏数据的情况下,今天教大家如何生成假数据(测试数据)进行模型调试,并且教…

时间序列预测(一)基于Prophet的销售额预测

时间序列预测&#xff08;一&#xff09;基于Prophet的销售额预测 小O&#xff1a;小H&#xff0c;有没有什么方法能快速的预测下未来的销售额啊 小H&#xff1a;Facebook曾经开源了一款时间序列预测算法fbprophet&#xff0c;简单又快速&#xff5e; 传统的时间序列算法很多&a…

mac电脑怎么录屏?2招轻松搞定!

案例&#xff1a;怎样对mac电脑进行屏幕录制&#xff1f; 【之前一直使用的是Windows电脑&#xff0c;对Windows电脑比较熟悉。最近换了一台苹果电脑&#xff0c;不知道使用它怎么进行电脑录屏。求一个好用的苹果电脑录屏方法&#xff01;】 在我们的日常工作和生活中&#x…