2020-11-06

EasyExcel的使用

导入依赖

x <dependency>    <groupId>com.alibaba</groupId>    <artifactId>easyexcel</artifactId>    <version>2.1.4</version></dependency>

EasyExce的导出

1 实体类上添加注解创建关联关系(属性和Excel单元格中的字段建立关系)* @ExcelProperty : 配置属性和生成Excel中列的关系(并设置表头为自定义的内容)
  • @ContentRowHeight(20) : 配置数据行的行高
  • @HeadRowHeight(20): 配置表头行的行高
  • @ColumnWidth(15) :配置列宽
  • @ExcelIgnoreUnannotated: 默认不加ExcelProperty 的注解的属性都会参与读写,在类上配置此注解剩余属性不会参与读写。
@ContentRowHeight(20)
@HeadRowHeight(20)
@ColumnWidth(15)
public class ContractProductVo implements Serializable {

	@ExcelProperty("客户名称")
	private String customName;		//客户名称
	@ExcelProperty("合同号")
	private String contractNo;		//合同号,订单号
	@ExcelProperty("货号")
	private String productNo;		//货号
	@ExcelProperty("数量")
	private Integer cnumber;		//数量
	@ExcelProperty("厂家名称")
	private String factoryName;		//厂家名称,冗余字段
	@ExcelProperty("交货期限")
	@DateTimeFormat("yyyy-MM-dd")
	private Date deliveryPeriod;	//交货期限
	@ExcelProperty("船期")
	@DateTimeFormat("yyyy-MM-dd")
	private Date shipTime;			//船期
	@ExcelProperty("贸易条款")
	private String tradeTerms;		//贸易条款
2.文件下载的代码实现(不使用模板)
	@RequestMapping("/printEasyExcel")
	public void printEasyExcel(String inputDate) throws IOException {
		//i.查询获取数据列表
		List<ContractProductVo> list = contractService.findContractProductVoByShipTime(inputDate,getCompanyId());
		//ii.配置下载属性
		response.setContentType("application/vnd.ms-excel");//在tomcat中复制来的(web.xml)
		response.setCharacterEncoding("utf-8");
		String fileName = URLEncoder.encode("出货表", "UTF-8");
		response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
		//iii.生成并下载Excel文件
	EasyExcel.write(response.getOutputStream()).head(ContractProductVo.class).sheet("出货表").doWrite(list);
	}
3.1模板填充

在这里插入图片描述EasyExcel支持两种模板占位符的写法

{属性名}	:针对单一对象的数据详情(传入参数为对象或者map)
	属性名 = 对象的属性/map中的key
{.属性名}  :针对数组中循环迭代,配置数组中对象元素的属性名称
3.2数据填充(控制器代码实现利用模板)
	@RequestMapping("/printEasyExcelTemplate")
	public void printEasyExcelTemplate(String inputDate) throws IOException {
		//1.查询获取数据列表
		List<ContractProductVo> list = contractService.findContractProductVoByShipTime(inputDate,getCompanyId());
		//2.配置对象数据map
		Map map = new HashMap();
		map.put("time",inputDate.replaceAll("-0","-").replaceAll("-","年"));
		//3.配置下载属性
		response.setContentType("application/vnd.ms-excel");
		response.setCharacterEncoding("utf-8");
		String fileName = URLEncoder.encode("出货表", "UTF-8");
		response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
		//4.获取模板路径
		String path = session.getServletContext().getRealPath("/")+"make/xlsprint/product.xlsx";
		//5.获取ExcelWrite对象
		ExcelWriter writer = EasyExcel.write(response.getOutputStream())
				.head(ContractProductVo.class) //指定头
				.withTemplate(path) //加载模板
				.build(); //构造write对象
		//6.获取WriterSheet对象
		WriteSheet sheet = EasyExcel.writerSheet().build();
		//7.填充列表,自动的创建数据行
		writer.fill(list,sheet);
		//8.填充对象数据
		writer.fill(map,sheet);
		//9.释放资源,完成数据下载
		writer.finish();
	}

EasyExce 导入(解析)

1.配置实体类

/**
 * 合同下货物的实体类
 */
@ExcelIgnoreUnannotated
public class ContractProduct extends BaseEntity implements Serializable {

	@ExcelProperty(value = "货号")
	private String productNo;		//货号
    
	@ExcelProperty(value = "货物描述")
	private String productDesc;		//货描
    
	@ExcelProperty(value = "装率")
	private String loadingRate;		//报运:装率    1/3
    
	@ExcelProperty(value = "箱数")
	private Integer boxNum;			//报运:箱数    100
    
	@ExcelProperty(value = "包装单位")
	private String packingUnit;		//包装单位:PCS/SETS   支/箱
    
	@ExcelProperty(value = "数量")
	private Integer cnumber;		//数量                            300

	@ExcelProperty(value = "要求")
	private String productRequest;	//要求
    
	@ExcelProperty(value = "单价")
	private Double price;			//单价

	@ExcelProperty(value = "生产厂家")
	private String factoryName;		//厂家名称,冗余字段
    
    //其他字段和getter,setter略
}
2.控制器代码实现
@RequestMapping("/import")
public String importExcel(String contractId,MultipartFile file) throws Exception {

    //通过EasyExcel自动解析并获取数据
    List<ContractProduct> list = EasyExcel.read(file.getInputStream())
        .head(ContractProduct.class) //指定实体类
        .sheet(0) //指定解析的sheet
        .doReadSync();  //将解析结果封装为list集合返回
    //设置对象的基本属性
    for (ContractProduct contractProduct : list) {
        contractProduct.setId(UUID.randomUUID().toString());
        contractProduct.setContractId(contractId);       
    }
    //保存
    contractProductService.saveList(list);
    return "redirect:/cargo/contractProduct/list.do?contractId="+contractId;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值