版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/X_kai_style/article/details/82222733
我的项目是springboot项目和前端的项目分离,经过大量测试实现了导出
1.maven依赖
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.0.3</version>
</dependency>
注意:我的项目中,添加依赖之后,idea编译器报错,jar包产生了冲突,如果没有产生冲突可跳过第二部,产生冲突则看第二步。
2.解决jar包冲突
第二个依赖中可以添加<exclusion> 这个标签,这个标签是用来解决jar包冲突的,我依赖的别的包中存在了,所以在当前的这个依赖中将多余的jar包排除掉。
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.0.3</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
3.Controller 层代码
@RequestMapping("/excelImport")
@ResponseBody
public void exportExcel(ReqPojo reqPojo, HttpServletRequest request, HttpServletResponse response) throws Exception {
// 告诉浏览器用什么软件可以打开此文件
response.setHeader("content-Type", "application/vnd.ms-excel");
// 下载文件的默认名称
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("用户数据表","UTF-8") + ".xls");
//编码
response.setCharacterEncoding("UTF-8");
//这里放自己想要的对象的集合,通过service获得集合
List<ResPojo> pojoList = ordService.exportExcelInvoice(reqPojo);
//对象类,集合对象,
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), ResPojo.class, pojoList);
workbook.write(response.getOutputStream());
}
4.实体类代码
导出的数据中之后存在数据,不会存在Excel中每个列的头部,并且数据库中通常存放的是代号10,20,30,导出的Excel中应该是对应的汉字,以及对时间的处理,所以可以对实体类进行处理,添加注解。
/**
* @Desc:
* @Author: sk
* @Date: 2018/8/27
*/
@Data
public class ResInvoicePojo implements Serializable {
private static final long serialVersionUID = 5613744953739462389L;
@Excel(name = "序号", orderNum = "0")
private String id;// '序号',
@Excel(name = "来源", replace = {"pc_10", "Android_20", "apple_30"}, orderNum = "1")
private Integer platform; // 来源:pc-10;Android-20;apple-30
@Excel(name = "提交时间", exportFormat = "yyyy-MM-dd HH:mm:ss", orderNum = "2")
private Date commit_date;// '提交时间',
5.前端代码
service和dao层产生的数据过程就不写了,都懂得,上前端代码。
注意: ajax 不能实现导出,导出的接口不能用ajax调用。
导出按钮:
<a class="btn btn-secondary radius size-S ml-10" id="js-export" onclick="derive()">导 出</a></div>
JavaScript实现:
function derive() {
id=$("#id").val(), //序号
platform=$("#platform").val(), //来源
commit_time= $("#commit_time").val(), //提交时间
//在这里使用的是get请求,可以传递查询的参数
$('#js-export').attr('href',"http://192.168.0.0:8080/export"+'?'+'id='+''+id+''+'&platform='+''+platform+'&commit_time='+''+commit_time);
}
6.附上导入Controller代码一份
@RequestMapping("/excelImport")
@ResponseBody
public String excelImport() {
ImportParams importParams = new ImportParams();
ImportParams params = new ImportParams();
params.setHeadRows(2);
try {
List<ReqPojo> list= ExcelImportUtil.importExcel(new File("D:\\数据表.xls"), ReqPojo.class,importParams);
reqService.importUser(list);
return "Excel导入成功";
}catch (Exception e){
e.printStackTrace();
return "Excel导入失败";
}
}