EasyExcel的使用

下载(创建)

导入依赖

<dependency>
	  <groupId>com.alibaba</groupId>
	  <artifactId>easyexcel</artifactId>
	  <version>1.1.2-beat1</version>
 </dependency>

创建一个实体类

  • 在EasyExcel中,通过java代码生成或者解析Excel文件很简单。不需要创建繁琐的表头* @ExcelProperty : 在创建Excel的时候,自动的读取实体类中的注解配置,生成表头
@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;		//贸易条款

	//省略get,set
}

通过EasyExcel创建Excel并下载(没有使用模板的版本)

例:

/**
	 * 使用EasyExcel完成excel的生成和下载
	 *  1、数据查询
	 *  2、设置下载信息
	 *  3、调用EasyExcel的工具类完成生成下载
	 */
	@RequestMapping("/printEasyExcel")
	public void printEasyExcel(String inputDate) throws IOException {
		//1、数据查询
		List<ContractProductVo> list = contractService.findByShipTime(inputDate+"%");
		//2、设置下载信息
		response.setContentType("application/vnd.ms-excel"); //下载excel
		response.setCharacterEncoding("utf-8");
		String fileName = URLEncoder.encode("出货表", "UTF-8");
		response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
		//3、调用EasyExcel的工具类完成生成下载
		EasyExcel.write(response.getOutputStream())
				.head(ContractProductVo.class) //设置表头
				.sheet("heima127") //指定页名称
				.doWrite(list); //设置数据
	}

对于复杂样式的Excel文件创建,EasyExcel支持模板打印。已一个Excel文件作为模板,自动的进行数据的拓展和填充。

  • 定义模板 ( 配置好了所有的样式 )
  • 配置实体类(表头)
  • java代码填充模板并下载Excel

定义模板

  • 在easyExcel中,支持两个模板语言
  • 语法:{map中的key}
  • 传入一个map集合:往往是用于处理非list集合的数据
  • 语法:{.对象中的属性名}
  • 传入一个list集合,会自动的循环list集合构造数据列表

java代码填充模板并下载Excel

/**
	 * 模板打印
	 *
	 */
	@RequestMapping("/printTemplate")
	public void printTemplate(String inputDate) throws IOException {
		//1.准备数据
		List<ContractProductVo> list = contractService.findByShipTime(inputDate+"%");
		Map map = new HashMap<>();
		inputDate = inputDate.replaceAll("-0","-").replaceAll("-","年");
		map.put("time",inputDate);
		map.put("title1","客户名称");
		//2.设置下载信息
		response.setContentType("application/vnd.ms-excel"); //下载excel
		response.setCharacterEncoding("utf-8");
		String fileName = URLEncoder.encode("出货表", "UTF-8");
		response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
		//3.加载excel模板
		String path = session.getServletContext().getRealPath("/")+"/make/tOUTPRODUCT.xlsx";
		//4.创建EasyExcel的excelWtire对象( 用于数据填充)
		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
				.head(ContractProductVo.class) //设置表头
				.withTemplate(path) //加载模板
				.build();
		//获取sheet对象
		WriteSheet sheet = EasyExcel.writerSheet().build();
		//5.调用方法完成填充map数据
		excelWriter.fill(map,sheet);
		//6.调用方法完成填充list数据
		excelWriter.fill(list,sheet);
		//7.属性资源,完成下载
		excelWriter.finish(); //下载excel文件,释放内存资源
	}
上传(解析)

创建一个实体类

合同下货物的实体类
通过EasyExcel完成文件解析,在实体类上通过注解配置表头
如果实体类中的属性,未配置@ExcelProperty
默认按照属性的编写顺序,从excel中获取数据
默认情况下,为配置注解的属性会影响数据封装
在类上配置一个注解:忽略未配置注解的属性

@ExcelIgnoreUnannotated
public class ContractProduct extends BaseEntity implements Serializable {

	private String id;

	@ExcelProperty("货号")
	private String productNo;		//货号
	private String productImage;	//图片路径
	@ExcelProperty("货物描述")
	private String productDesc;		//货描
	@ExcelProperty("装率")
	private String loadingRate;		//报运:装率    1/3
	@ExcelProperty("箱数")
	private Integer boxNum;			//报运:箱数    100
	@ExcelProperty("包装单位")
	private String packingUnit;		//包装单位:PCS/SETS   支/箱
	@ExcelProperty("数量")
	private Integer cnumber;		//数量                            300
	private Integer outNumber;		//报运:出货数量            200
	private Integer finished;		//报运:是否完成		no
	@ExcelProperty("要求")
	private String productRequest;	//要求
	@ExcelProperty("单价")
	private Double price;			//单价
	private Double amount;			//总金额,冗余
	private Integer orderNo;		//排序号
	private String contractId;      //合同号
	@ExcelProperty("生产厂家")
	private String factoryName;		//厂家名称,冗余字段
	private String factoryId;

	private List<ExtCproduct> extCproducts ;	//货物和附件,一对多

	//省略,get,set方法

通过EasyExcel解析文件

通过EasyExcel完成文件上传解析,批量货物保存
* 参数:购销合同id
* 参数:上传的excel文件对象

@RequestMapping("/import")
	public String importExcel(String contractId,MultipartFile file) throws Exception {
		List<ContractProduct> list = EasyExcel.read(file.getInputStream())
				.head(ContractProduct.class) //设置表头,将数据转化为目标对象
				.sheet(0) //读取第一页数据
				.doReadSync(); //解析excel,获取所有的数据

		for (ContractProduct contractProduct : list) {
			System.out.println(contractProduct);
			contractProduct.setContractId(contractId);
			contractProduct.setCompanyId(getLoginCompanyId());
			contractProduct.setCompanyName(getLoginCompanyName());
		}
		contractProductService.saveAll(list);
		return  "redirect:/cargo/contractProduct/list.do?contractId="+contractId;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
EasyExcel是阿里巴巴开源的一个excel处理框架,使用简单且节省内存。它适合处理大数据量的Excel,不像之前的Excel解析框架将数据一次性加载到内存中,而是从磁盘上逐行读取数据并解析。它重写了poi对07版本Excel的解析,在处理大数据时不容易发生内存溢出。EasyExcel可以用于数据导入、数据导出以及数据传输等场景。在使用EasyExcel时,可以使用注解来自定义表头、选择excel中的顺序、忽略不需要导出的属性、进行日期格式转换,以及设置行宽等。官方文档提供了更详细的使用说明。 在实际应用中,可以使用@ExcelIgnore注解来标记不需要导出的多余属性,这样可以避免导出不需要的字段。另外,可以使用@DateTimeFormat注解来进行日期格式转换,使用@ColumnWidth注解来设置行宽。 总的来说,EasyExcel是一个方便易用的excel处理框架,可以帮助我们简化Excel的处理操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [EasyExcel使用教程](https://blog.csdn.net/tttalk/article/details/123379580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon20120331

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值