?
导出结果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
@AllArgsConstructor
public 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)
- 屯留老爷山
- 历史上的禁武令,是否使中国武术趋于花拳绣腿、缺乏实战能力? 中国十大禁拳
- 新中国排在十大元帅之后的55名上将都有谁?是按什么排列顺序的 中国近代十大元帅
- 中国最“牛”的省,拥有4座一线城市 中国之最的省市
- 使用4800万像素照片荣耀V20成功打破吉尼斯世界纪录 吉尼斯记录摄影
- 松原汽车站
- 中国版chatGPT【文心一言】
- 普陀山在哪个省
- 世界太极文化节
- 乌海住宿