使用easyPoi导入导出excel表格
easypoi详细使用文档点这里>>>easypoi官网教程文档地址
转载请声明出处,谢谢合作哦
1.老规矩,一般使用人家的技术,肯定先导人家的jar包
//这是官网推荐的jar,如果使用过程中有冲突,报乌七八糟错误😎, jar包建议更换到4.0以上
<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>
2.将需要导出的数据的实体类配置以下注解
//此处省略getter,setter
@ExcelTarget(value = "pitcher")
public class Pitcher implements Serializable {
@Excel(name = "编号")
private String id;
@Excel(name = "标题")
private String name;
@Excel(name = "图片",type = 2,width = 40 , height = 40,savePath = "上传图片的路经配置,建议使用绝对路径")
private String path;
@Excel(name = "状态")
private String status;
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "创建时间",format = "yyyy-MM-dd",importFormat = "yyyy-MM-dd")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "修改时间",format = "yyyy-MM-dd",importFormat = "yyyy-MM-dd")
private Date updateTime;
}
注意:需要导出图片的话,在图片的属性上额外配置!!!(宽高自行调整):
@Excel(name = "图片",type = 2,width = 40 , height = 40")
private String path;
注意:需要导入图片的话,要想更改图片的保存位置,在图片的属性上配置:
@Excel(name = "图片"savePath = "要保存的位置的相对路径")
private String path;
注解及其作用:
@ExcelTarget(value = " "):用在实体类上,相当于表的唯一标识
@Excel(name = " ") :用在属性上,name值相当于你要导出的表格的表头。
3.导出表格的代码:(前台ajax无法实现导出功能,也或许是我的有问题,有待有缘人尝试)
前台页面代码:
<li role="presentation"><a href="javaScript:void(0)" id="out">导出轮播图</a></li>
//单击事件
$("#out").click(function () {
location.href = "**${path}/pitcher/outExcel**";
});
controller层代码:
/**
* ---导出
* @param response 设置响应格式
*/
@RequestMapping("/**outExcel**")
@ResponseBody
public void outExcel(HttpServletResponse response){
//调用业务层处理导出功能
**pitcherService.outExcel(response);**
}
//控制层代码
//导出轮播图(注意:要想导出图片,导出的时候必须将图片的路径设置为绝对路径)
@Override
public void **outExcel**(HttpServletResponse response) {
**List<Pitcher> list = pitcherDao.selectAll();**
List<Pitcher> **list2** = new ArrayList<>();
for (Pitcher pitcher : list) {
//设置绝对路径
pitcher.setPath(session.getServletContext().getRealPath("/img")+"/"+pitcher.getPath());
list2.add(pitcher);
}
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("持明法州轮播图信息","轮播图"),
Pitcher.class, **list2**);
//设置浏览器响应格式
try {
String encode = URLEncoder.encode("pitcher.xls");
response.setHeader("content-disposition","attachment;filename="+encode);
response.setContentType("application/vnd.ms-excel");
workbook.write(response.getOutputStream());
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
3.导入功能(将表格导入到数据库中)
注意:需要导入图片的话,要想更改图片的保存位置,在图片的属性上配置:(默认保存路径:自己项目盘下的\excel\upload\img\Pitcher)
@Excel(name = "图片"savePath = "要保存的位置的相对路径")
private String path;
注意:导入功能,第一行表头名字必须和自己实体类上属性设置的name值相对应
//前台的代码(这里我使用的是submit事件,ajax序列化获取表单也可以做)
<input type="file" name="file" id="in">
<button type="submit" class="btn btn-primary">导入</button>
//后台:controller层
/**
* ---轮播图的导入
* @param file excel文件
*/
@RequestMapping("/inputExcel")
public String inputExcel(MultipartFile file){
**pitcherService.inputPitcherExcle(file);**
return "redirect:/index.jsp";
}
//业务层处理导出功能代码
//excel上传
@Override
public void inputPitcherExcle(MultipartFile file) {
ImportParams params = new ImportParams();
params.setTitleRows(1);
params.setHeadRows(1);
params.setNeedSave(true);
List<Pitcher> list = null;
try {
list = ExcelImportUtil.importExcel(file.getInputStream(), Pitcher.class, params);
} catch (Exception e) {
e.printStackTrace();
}
//List<Pitcher> list2 = new ArrayList<>();
for (Pitcher pitcher : list) {
//由于从excel文件中上传的图片路径是默认格式(upload/excelUpload\1.png),需要自己将路径修改为所需格式,使用String的分割
String[] split = pitcher.getPath().toString().split("\\\\");
//将最后的图片名字保存到数据库
pitcher.setPath(split[split.length-1]);
pitcherDao.insert(pitcher);
}
}