easypoi的使⽤和遇到的问题
easypoi的使⽤和遇到的问题
⼤纲
本⽂内容简介
1. easypoi的简单介绍
2. easypoi的简单使⽤
3. easypoi中遇到的问题(导出图⽚报错,导出图⽚不显⽰,导⼊图⽚不能保存到⾃⼰想要保存到的资源服务器)
4. easypoi的导⼊校验和返回校验不通过的excel数据
easypoi简介
easypoi功能如同名字easy,主打的功能就是容易,让⼀个没见接触过poi的⼈员
就可以⽅便的写出Excel导出,Excel模板导出,Excel导⼊,Word模板导出,通过简单的注解和模板
语⾔(熟悉的表达式语法),完成以前复杂的写法。
⽂中版本,已知开启校验错误数据的时候导出有问题,新版本中修改了源数据删除错误数据获取正确的workbook,以及源数据删除正确数据获取错误的workbook的bug。
准备⼯作
本demo使⽤fastdfs资源服务器保存图⽚,也有使⽤到httpclient请求⽹络资源。
1,添加maven依赖。
<!-- easypoi依赖-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.2.0</version>
</dependency>
<!-- fastdfs -->
<dependency>
<groupId>bato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.1-RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4.1</version>
</dependency>
2,配置application.properties。
fdfs.so-timeout=1500
#fastdfs服务器的地址
fdfs.thumbImage.height=150
fdfs.thumbImage.width=150
IMAGE_SERVER_URL=192.168.25.133/
abled=false
server.port=8080
server.servlet.path=/
3,编写⼀个excel实体类。
public class Member{
@Excel(name ="⽤户id")//表明这个字段要导出到excel或从excel导⼊
private Long id;
@Excel(name ="⽤户姓名")
private String name;
@Excel(name ="⽣⽇", format ="yyyy-MM-dd HH:mm:ss")
//format指定字段导⼊导出的⽇期格式化类型
private Date birthday;
@Excel(name ="性别", replace ={"男_0","⼥_1"})//replace使⽤的时候直接"实际含义_数据库实际内容"即可,导⼊导出均适⽤private String sex;
@Excel(name ="⽤户年龄")
private String age;
@Excel(name ="电话", width =16)
private String phone;
@Excel(name ="⽤户账号", width =16)
private String loginName;
@Excel(name ="⽤户头像", width =32, height =32, type =2)
//type等于2表⽰导出的类型为图⽚。导⼊的也是⼀样。
private String pic;
public Member(){}
public Member(Long id, String name, String sex, Date birthday, String age, String phone, String loginName, String pic){ this.id = id;
this.name = name;
this.sex = sex;
this.birthday = birthday;
this.age = age;
this.phone = phone;
this.loginName = loginName;
this.pic = pic;
}//getset省略
}
4,准备⼀个fastdfs服务器服务(资源服务器根据⾃⼰需要设定。也可以不要,看⾃⼰的图⽚准备保存到哪⾥)。
@Service
public class ExcelService{
@Autowired
private FastFileStorageClient storageClient;
@Value("${IMAGE_SERVER_URL}")
private String url;
/**
* 上传资源到fastdfs资源服务器
* @param file
* @return
* @throws IOException
*/
public String uploadFile(MultipartFile file) throws IOException {
StorePath storePath = storageClient.InputStream()
,
Size(), OriginalFilename()),null);
return url + FullPath();
}
}
这样准备⼯作就做好了。更多的标签介绍可以去上⾯提供的⽹址查看,也可以点进@Excel查看这个⾥⾯每个属性对应的注释。easypoi的简单使⽤。
⼀.EXCEL导出
@RestController
public class ExcelController{
@Autowired
private ExcelService excelService;
//准备⼀些图⽚以供测试
public static final String[] imgs =new String[]{
//            "192.168.25.133/group1/M00/00/01/wKgZhVvC78SAfpWaAAAsAp7EzlE763.jpg",
"ss3.bdstatic/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=108228188,2741176027&fm=27&gp=0.jpg",
"192.168.25.133/group1/M00/00/01/wKgZhVvC8OCAJRuiAABeY6xwxBQ960.jpg",
"192.168.25.133/group1/M00/00/01/wKgZhVvC8PGAIo8LAABP3bR1ZnU861.jpg",
"192.168.25.133/group1/M00/00/01/wKgZhVvC8P6AFx5KAAA22wMuH2A112.jpg"
};
/**
* 上传⽂件到fastdfs
* @param file
* @return
* @throws IOException
*/
@PostMapping("/uploadFile")
public String uploadFile(MultipartFile file) throws IOException {
String path = excelService.uploadFile(file);
return path;
}
/**
* 下载excel
*/
@GetMapping("/export")
public void export(HttpServletResponse response) throws IOException {
List<Member> list =new ArrayList<>();
for(int i =0; i <4; i++){
list.add(new Member((long)i,"张三"+ i, i %2+"",new Date(),20+ i +"",
"152********","123456"+ i, imgs[i]));
}
//ExportParams可以通过构造的两个参数设置导出的sheet名字和excel的title列名
ExportParams params =new ExportParams();
Workbook workbook = portExcel(params, Member.class, list);
// 告诉浏览器⽤什么软件可以打开此⽂件
response.setHeader("content-Type","application/vnd.ms-excel");
/
/ 下载⽂件的默认名称
response.setHeader("Content-Disposition","attachment;filename="+ de("⽤户数据表","UTF-8")+".xls");
//编码
response.setCharacterEncoding("UTF-8");
getsavefilename
workbook.OutputStream());
}
}
导出图⽚的时候遇到的问题ArrayIndexOutOfBoundsException
1,导出图⽚的时候报错:
java.lang.ArrayIndexOutOfBoundsException:0
at cn.afterturn.easypoi.FileExtendName(PoiPublicUtil.java:147)
发现了问题,那么我们就需要解决问题:
Easypoi的ImageCache为我们提供了setLoadingCache()⽅法,使得我们可以设置⾃⼰想要的loadingCache,所以,我们只需要⾃⼰重写⼀个loadingCache并赋值给ImageCache。
我们可以在Spring容器启动后把这个⾃定义的loadingCache赋值给ImageCache。
只需要修改这个截取的地⽅即可。
导出图⽚的时候遇到图⽚不显⽰的问题

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。