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

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

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

@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;

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

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

简单导入

====

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

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

@Controller

@Api(tags = "EasyPoiControll

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

er", 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文件即可,导入成功后会返回解析到的数据。

复杂导出

====

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

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

@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就是我们需要导出的嵌套订单数据;

@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方法排除掉;

@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;

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

自定义处理

=====

如果你想对导出字段进行一些自定义处理,EasyPoi也是支持的,比如在会员信息中,如果用户没有设置昵称,我们添加下暂未设置信息。

  • 我们需要添加一个处理器继承默认的ExcelDataHandlerDefaultImpl类,然后在exportHandler方法中实现自定义处理逻辑;

public class MemberExcelDataHandler extends ExcelDataHandlerDefaultImpl {

@Override

public Object exportHandler(Member obj, String name, Object value) {

if(“昵称”.equals(name)){

String emptyValue = “暂未设置”;

if(value==null){

return super.exportHandler(obj,name,emptyValue);

}

if(value instanceof String&&StrUtil.isBlank((String) value)){

return super.exportHandler(obj,name,emptyValue);

}

}

return super.exportHandler(obj, name, value);

}

@Override

public Object importHandler(Member obj, String name, Object value) {

return super.importHandler(obj, name, value);

}

}

  • 然后修改Controller中的接口,调用MemberExcelDataHandler处理器的setNeedHandlerFields设置需要自定义处理的字段,并调用ExportParams的setDataHandler设置自定义处理器;

@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);

//对导出结果进行自定义处理

MemberExcelDataHandler handler = new MemberExcelDataHandler();

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5676721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存