0
点赞
收藏
分享

微信扫一扫

SpringBoot整合easyExcel——数据导出

janedaring 2022-04-26 阅读 89
java

这几天修改公司系统里的导出功能,因而接触到了easyExcel,也在easyExcel的官方文档里浅看了两天,但也是一知半解,不过经主管的指点,也完成了导出功能的修改,这里做个完整的记录:

 pom配置文件

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
        </dependency>

实体类:

实体类不引用了,就是正常写,无需特殊照顾

controller层:

@ResponseBody
	@RequestMapping(value = "/export", method = RequestMethod.POST)
	public ResponseData export(@RequestParam Map<String, Object> params) {
		String fileName = "服装信息";
    	fileName = UUID.randomUUID().toString() + "_" + fileName + ".xlsx";
    	String folder = Global.getTempPath() + File.separator + "pio" + File.separator;
    	FileUtil.touch(folder + fileName);
    	List<BusinessClothingEntity> listData = businessClothingService.export(params);
    	List<ClothingExcel> excels = new ArrayList<>();
    	for (BusinessClothingEntity number : listData) {
    		ClothingExcel clothingExcel = new ClothingExcel();
    		BeanUtil.copyBeanProp(clothingExcel, number);
    		excels.add(clothingExcel);
    	}
    	EasyExcel.write(folder + fileName, ClothingExcel.class).sheet("模板").doWrite(excels);
    	return success(fileName);
	}

这里需注意

EasyExcel.write(folder + fileName, ClothingExcel.class).sheet("模板").doWrite(excels);

这行代码,这是关键,我们点击进入 ClothingExcel类:

package com.rutong.business.pojo;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.util.Date;

@Data
public class ClothingExcel {

	@ExcelProperty(index = 0,value = "点位名称")
	private String tsName;

	@ExcelProperty(index = 1,value = "点位编号")
	private String tsNumber;

	@ExcelProperty(index = 2,value = "姓名")
	private String name;
	
	/** 服装编码 */
	@ExcelProperty(index = 3,value = "服装编码")
	private String cloCode;

	@ExcelProperty(index = 4,value = "性别")
	private String sex;

	@ExcelProperty(index = 5,value = "职务")
	private String job;

	@ExcelProperty(index = 6,value = "手机号")
	private String phone;

	/** 服装RFID */
	@ExcelProperty(index = 7,value = "芯片标签号")
	private String cloRfid;

	/** 服装描述 */
	@ExcelProperty(index = 8,value = "配置服装")
	private String cloDesc;

	/** 服装颜色 */
	@ExcelIgnore
	private String cloColor;

	/** 服装大小 */
	@ExcelProperty(index = 9,value = "服装规格")
	private String cloSize;

	/**物资领取次数*/
	@ExcelProperty(index = 10,value = "物资领取次数")
	private Integer receive;

	/**最后领取时间*/
	@ExcelProperty(index = 11,value = "最后领取时间")
	@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
	private Date receiveTime;
	
	@ExcelIgnore
	private String areaName;
	

}

 上面就是ClothingExcel类里面的代码,如果在这之前你有去官方文档里看过,或者查阅过其他的资料,那么你可能会认为这不就是写在实体类里面的吗,这样想也是对的,我前期也查过很多demo,就是这样写的实体类,但因为我要用到系统里面,使用步骤就会有所不同

实现类:

public List<BusinessClothingEntity> export(Map<String, Object> params) {
		QueryWrapper<BusinessClothingEntity> queryWrapper = new QueryWrapper<BusinessClothingEntity>();
		String cloCode = (String) params.get("cloCode");
		queryWrapper.eq(ToolUtil.isNotEmpty(cloCode), "clo_code", cloCode);
		String cloDesc = (String) params.get("cloDesc");
		queryWrapper.eq(ToolUtil.isNotEmpty(cloDesc), "clo_desc", cloDesc);
		String cloColor = (String) params.get("cloColor");
		queryWrapper.eq(ToolUtil.isNotEmpty(cloColor), "clo_color", cloColor);
		String cloSize = (String) params.get("cloSize");
		queryWrapper.eq(ToolUtil.isNotEmpty(cloSize), "clo_size", cloSize);
		String cloRfid = (String) params.get("cloRfid");
		queryWrapper.eq(ToolUtil.isNotEmpty(cloRfid), "clo_rfid", cloRfid);
		String areaId = (String) params.get("areaId");
		if (StringUtils.isEmpty(areaId)) {
			LoginUserEntity userInfo = ShiroUtils.getUserInfo();
			areaId = String.valueOf(userInfo.getAreaId());
		}
		SysAreaEntity area = sysAreaService.getById(areaId);
		if (area.getLevel() == 2) {
			// 查询所有
		} else if (area.getLevel() == 3) {
			// 区级
			QueryWrapper<SysAreaEntity> ew = new QueryWrapper<SysAreaEntity>();
			ew.eq("parent_id", area.getId());
			List<SysAreaEntity> citys = sysAreaService.list(ew);
			List<Long> areaIds = citys.stream().map(c -> c.getId()).collect(Collectors.toList());
			areaIds.add(area.getId());
			queryWrapper.in(ToolUtil.isNotEmpty(areaId), "area_id", areaIds);
		} else if (area.getLevel() == 4) {
			// 街道
			queryWrapper.eq(ToolUtil.isNotEmpty(areaId), "area_id", area.getId());
		}
		List<BusinessClothingEntity> list = businessClothingMapper.selectList(queryWrapper);
		return list;
	}

前端:

            <a class="btn btn-success" onclick="exportExcel()">
			    <i class="fa fa-download"></i> 导出Excel
			</a>

 function exportExcel(){
    	$.table.exportExcel('clothing-form')
    }

本人也是二次开发,在原有的代码上面修改,这差不多就是整个流程,导出之后长这样:

文档的字段顺序,是根据前面  ClothingExcel类中,@ExcelProperty注解里index值的顺序来的,更改index属性的值便可更改文档中字段的顺序

知识点补充:

@ExcelProperty

 必要的一个注解,注解中有三个参数value,index,converter分别代表列明,列序号,数据转换方式
1.value 通过标题文本对应
2.index 通过文本行号对应
3.converter 转换器,通常入库和出库转换使用,如性别入库0和1,出库男和女

@ExcelIgnore

不将该字段转换成Excel,加上此注解,该字段将不会在文档中显示

@ExcelIgnoreUnannotated

没有注解的字段都不转换

@ColumnWith

设置列宽度,只有一个参数value,value的单位是字符长度,最大可以设置255个字符,因为一个excel单元格最大可以写入的字符个数就是255个字符。

示例:

public class ImeiEncrypt {
    @ColumnWidth(value = 18)
    private String imei;
}
举报

相关推荐

0 条评论