SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了(1)

简单导出

====

我们以会员信息列表导出为例,使用EasyPoi来实现下导出功能,看看是不是够简单!

  • 首先创建一个会员对象Member,封装会员信息;

/**

  • 购物会员

  • Created by macro on 2021/10/12.

*/

@Data

@EqualsAndHashCode(callSuper = false)

public class Member {

@Excel(name = “ID”, width = 10)

private Long id;

@Excel(name = “用户名”, width = 20, needMerge = true)

private String username;

private String password;

@Excel(name = “昵称”, width = 20, needMerge = true)

private String nickname;

@Excel(name = “出生日期”, width = 20, format = “yyyy-MM-dd”)

private Date birthday;

@Excel(name = “手机号”, width = 20, needMerge = true, desensitizationRule = “3_4”)

private String phone;

private String icon;

@Excel(name = “性别”, width = 10, replace = {“男_0”, “女_1”})

private Integer gender;

}

  • 在此我们就可以看到EasyPoi的核心注解@Excel,通过在对象上添加@Excel注解,可以将对象信息直接导出到Excel中去,下面对注解中的属性做个介绍;

  • name:Excel中的列名;

  • width:指定列的宽度;

  • needMerge:是否需要纵向合并单元格;

  • format:当属性为时间类型时,设置时间的导出导出格式;

  • desensitizationRule:数据脱敏处理,3_4表示只显示字符串的前3位和后4位,其他为*号;

  • replace:对属性进行替换;

  • suffix:对数据添加后缀。

  • 接下来我们在Controller中添加一个接口,用于导出会员列表到Excel,具体代码如下;

/**

  • EasyPoi导入导出测试Controller

  • Created by macro on 2021/10/12.

*/

@Controller

@Api(tags = “EasyPoiController”, description = “EasyPoi导入导出测试”)

@RequestMapping(“/easyPoi”)

public class EasyPoiController {

@ApiOperation(value = “导出会员列表Excel”)

@RequestMapping(value = “/exportMemberList”, method = RequestMethod.GET)

public void exportMemberList(ModelMap map,

HttpServletRequest request,

HttpServletResponse response) {

List memberList = LocalJsonUtil.getListFromJson(“json/members.json”, Member.class);

ExportParams params = new ExportParams(“会员列表”, “会员列表”, ExcelType.XSSF);

map.put(NormalExcelConstants.DATA_LIST, memberList);

map.put(NormalExcelConstants.CLASS, Member.class);

map.put(NormalExcelConstants.PARAMS, params);

map.put(NormalExcelConstants.FILE_NAME, “memberList”);

PoiBaseView.render(map, request, response, NormalExcelConstants.EASYPOI_EXCEL_VIEW);

}

}

  • LocalJsonUtil工具类,可以直接从resources目录下获取JSON数据并转化为对象,例如此处使用的members.json;

SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了

  • 运行项目,直接通过Swagger访问接口,注意在Swagger中访问接口无法直接下载,需要点击返回结果中的下载按钮才行,访问地址:http://localhost:8088/swagger-ui/

SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了

  • 下载完成后,查看下文件,一个标准的Excel文件已经被导出了。

SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了

简单导入

====

导入功能实现起来也非常简单,下面以会员信息列表的导入为例。

  • 在Controller中添加会员信息导入的接口,这里需要注意的是使用@RequestPart注解修饰文件上传参数,否则在Swagger中就没法显示上传按钮了;

/**

  • EasyPoi导入导出测试Controller

  • Created by macro on 2021/10/12.

*/

@Controller

@Api(tags = “EasyPoiController”, description = “EasyPoi导入导出测试”)

@RequestMapping(“/easyPoi”)

public class EasyPoiController {

@ApiOperation(“从Excel导入会员列表”)

@RequestMapping(value = “/importMemberList”, method = RequestMethod.POST)

@ResponseBody

public CommonResult importMemberList(@RequestPart(“file”) MultipartFile file) {

ImportParams params = new ImportParams();

params.setTitleRows(1);

params.setHeadRows(1);

try {

List list = ExcelImportUtil.importExcel(

file.getInputStream(),

Member.class, params);

return CommonResult.success(list);

} catch (Exception e) {

e.printStackTrace();

return CommonResult.failed(“导入失败!”);

}

}

}

  • 然后在Swagger中测试接口,选择之前导出的Excel文件即可,导入成功后会返回解析到的数据。

SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了

复杂导出

====

当然EasyPoi也可以实现更加复杂的Excel操作,比如导出一个嵌套了会员信息和商品信息的订单列表,下面我们来实现下!

  • 首先添加商品对象Product,用于封装商品信息;

/**

  • 商品

  • Created by macro on 2021/10/12.

*/

@Data

@EqualsAndHashCode(callSuper = false)

public class Product {

@Excel(name = “ID”, width = 10)

private Long id;

@Excel(name = “商品SN”, width = 20)

private String productSn;

@Excel(name = “商品名称”, width = 20)

private String name;

@Excel(name = “商品副标题”, width = 30)

private String subTitle;

@Excel(name = “品牌名称”, width = 20)

private String brandName;

@Excel(name = “商品价格”, width = 10)

private BigDecimal price;

@Excel(name = “购买数量”, width = 10, suffix = “件”)

private Integer count;

}

  • 然后添加订单对象Order,订单和会员是一对一关系,使用@ExcelEntity注解表示,订单和商品是一对多关系,使用@ExcelCollection注解表示,Order就是我们需要导出的嵌套订单数据;

/**

  • 订单

  • Created by macro on 2021/10/12.

*/

@Data

@EqualsAndHashCode(callSuper = false)

public class Order {

@Excel(name = “ID”, width = 10,needMerge = true)

private Long id;

@Excel(name = “订单号”, width = 20,needMerge = true)

private String orderSn;

@Excel(name = “创建时间”, width = 20, format = “yyyy-MM-dd HH:mm:ss”,needMerge = true)

private Date createTime;

@Excel(name = “收货地址”, width = 20,needMerge = true )

private String receiverAddress;

@ExcelEntity(name = “会员信息”)

private Member member;

@ExcelCollection(name = “商品列表”)

private List productList;

}

  • 接下来在Controller中添加导出订单列表的接口,由于有些会员信息我们不需要导出,可以调用ExportParams中的setExclusions方法排除掉;

/**

  • EasyPoi导入导出测试Controller

  • Created by macro on 2021/10/12.

*/

@Controller

@Api(tags = “EasyPoiController”, description = “EasyPoi导入导出测试”)

@RequestMapping(“/easyPoi”)

public class EasyPoiController {

@ApiOperation(value = “导出订单列表Excel”)

@RequestMapping(value = “/exportOrderList”, method = RequestMethod.GET)

public void exportOrderList(ModelMap map,

HttpServletRequest request,

HttpServletResponse response) {

List orderList = getOrderList();

ExportParams params = new ExportParams(“订单列表”, “订单列表”, ExcelType.XSSF);

//导出时排除一些字段

params.setExclusions(new String[]{“ID”, “出生日期”, “性别”});

map.put(NormalExcelConstants.DATA_LIST, orderList);

map.put(NormalExcelConstants.CLASS, Order.class);

map.put(NormalExcelConstants.PARAMS, params);

map.put(NormalExcelConstants.FILE_NAME, “orderList”);

PoiBaseView.render(map, request, response, NormalExcelConstants.EASYPOI_EXCEL_VIEW);

}

}

  • 在Swagger中访问接口测试,导出订单列表对应Excel;

SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了

  • 下载完成后,查看下文件,EasyPoi导出复杂的Excel也是很简单的!

SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

学习视频:

大厂面试真题:

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

学习视频:

[外链图片转存中…(img-JveS2teR-1713407255892)]

大厂面试真题:

[外链图片转存中…(img-paf3RGjy-1713407255893)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是SpringBoot整合EasyExcel模板导出Excel的步骤: 1.创建SpringBoot项目 2.在pom.xml文件中添加EasyExcel依赖 ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version> </dependency> ``` 3.创建Excel模板 4.编写实体类,用于映射Excel中的数据 5.编写Excel导出工具类 ```java public class ExcelUtil { /** * 导出 Excel :一个 sheet,带表头. * * @param sheetName sheet 名称 * @param clazz 实体类对象,通过 annotation 设置标题 * @param data 实体类对象数据 list * @param out 输出流 */ public static void exportExcel(String sheetName, Class clazz, List data, OutputStream out) { ExcelWriter writer = EasyExcelFactory.getWriter(out); //写第一个sheet,sheet1 数据全是List<String> 无模型映射关系 Sheet sheet = new Sheet(1, 0, clazz); sheet.setSheetName(sheetName); //设置自适应宽度 sheet.setAutoWidth(Boolean.TRUE); //写数据到 Writer 上下文中 writer.write(data, sheet); //将上下文中的最终 outputStream 写入到指定文件中 writer.finish(); } } ``` 6.在Controller中调用Excel导出工具类 ```java @GetMapping("/export") public void export(HttpServletResponse response) throws IOException { //查询数据 List<User> userList = userService.getUserList(); //设置文件名 String fileName = "用户信息表"; //设置响应头 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx"); //导出Excel ExcelUtil.exportExcel(fileName, User.class, userList, response.getOutputStream()); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值