【EasyPoi实战系列】Spring Boot使用EasyPoi的注解让表格更( 二 )

?
导出结果excel表格显示为空白 。
芭比Q了,这个真是有毒,后来发现是一个配置问题,找到工具类,找到如下代码:
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));}?
只需要将.XSSF修改为.HSSF即可 。
HSSF:是操作-2003版本,扩展名为.xls 。
XSSF:是操作版本开始,扩展名为.xlsx 。
SXSSF:是在XSSF基础上,POI3.8版本开始提供的一种支持低内存占用的操作方式,扩展名为.xlsx 。
导出效果:
虽然导出正常了,但我就有点困惑了 。XSSF是比较新的格式,HSSF是旧的格式,为什么写的这种写法不支持呢?
对于相对路径,有两种情况:
(1)使用了excel的模板文件:图片的相对路径是相对于Excel文件的路径,而不是相对于 Boot项目的路径或其他路径 。也就是说,如果Excel文件和图片在同一目录下,则只需在Excel中指定图片的文件名即可 。如果Excel和图片在不同的目录下,则应使用相对Excel文件路径的子路径指定图片路径 。例如,如果Excel文件位于 Boot项目的src/main//excel/目录下,图片位于src/main///目录下,则应该在Excel文件中指定相对路径为..//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..poi.util.将转换为字节数组 。
这里的话,读取的是//img下的图片资源,如果是网络资源的话,只要将网络资源的图片转换为字节数组,依然是可以导出的 。
至此整个如下:
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)