前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SSM整合-EasyExcel框架简化POI操作Excel

SSM整合-EasyExcel框架简化POI操作Excel

作者头像
用户9006224
发布于 2022-12-21 01:01:43
发布于 2022-12-21 01:01:43
72600
代码可运行
举报
文章被收录于专栏:cjz的专栏cjz的专栏
运行总次数:0
代码可运行

概述

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一些严重的问题,如代码编写繁琐且重复,极其耗费内存。EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百万的Excel

导入依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.1.4</version>
</dependency>

认识注解

这些注解要写在 实体类 中

  • @ExcelProperty : 配置属性和生成Excel中列的关系(并设置表头为自定义的内容),并兼顾注解的形式指定解析Excel中列的位置
  • @ContentRowHeight(20) : 配置数据行的行高
  • @HeadRowHeight(20): 配置表头行的行高
  • @ColumnWidth(15) :配置列宽
  • @ExcelIgnoreUnannotated: 默认不加ExcelProperty 的注解的属性都会参与读写,在类上配置此注解剩余属性不会参与读写。

数据导出方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	@RequestMapping("/请求地址")
	public void printEasyExcel(String inputDate) throws IOException {
		//i.查询获取数据列表
		List<ContractProductVo> list = contractService.findContractProductVoByShipTime(inputDate,getCompanyId());
		//ii.配置下载属性
		response.setContentType("application/vnd.ms-excel");
		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("出货表s1").doWrite(list);
	}

实体类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;

@Data //我使用了lombok
@ContentRowHeight(24)
@HeadRowHeight(30)
@ColumnWidth(25)
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;		//贸易条款

}

模板导出

{属性名} :针对单一对象的数据详情(传入参数为对象或者map) 属性名 = 对象的属性/map中的key {.属性名} :针对数组中循环迭代,配置数组中对象元素的属性名称

需要在模板中用这样的形式

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping("/请求方法")
	public void printEasyExcelTemplate(String inputDate) throws IOException {
		//1.查询获取数据列表
		List<ContractProductVo> list = contractService.findAll();
		//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("/")+"自己的模板位置.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();
	}

上传Excel解析方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping("/解析请求")
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 "返回结果";
}

解析 实体类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 解析实体类
 */
@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略
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
学习GAN模型量化评价,先从掌握FID开始吧
Frechet Inception 距离得分(Frechet Inception Distance score,FID)是计算真实图像和生成图像的特征向量之间距离的一种度量。
机器之心
2019/10/15
3.5K0
学习GAN模型量化评价,先从掌握FID开始吧
高斯混合模型 GMM 的详细解释
来源:机器学习杂货店本文约3500字,建议阅读10+分钟本文为你介绍 KMeans 的一个替代方案之一,高斯混合模型。 高斯混合模型(后面本文中将使用他的缩写 GMM)听起来很复杂,其实他的工作原理和 KMeans 非常相似,你甚至可以认为它是 KMeans 的概率版本。这种概率特征使 GMM 可以应用于 KMeans 无法解决的许多复杂问题。 因为KMeans的限制很多,比如:它假设簇是球形的并且大小相同,这在大多数现实世界的场景中是无效的。并且它是硬聚类方法,这意味着每个数据点都分配给一个集群,这也是不
数据派THU
2023/05/11
8910
高斯混合模型 GMM 的详细解释
深入浅出贝叶斯模型选择
贝叶斯推理[1](Bayesian inference)是统计学中的一个重要问题,也是许多机器学习方法中经常遇到的问题。例如,用于分类的高斯混合模型或用于主题建模的潜在狄利克雷分配(Latent Dirichlet Allocation,简称LDA)模型等概率图模型都需要在拟合数据时解决这一问题。
数据STUDIO
2021/11/10
1.6K0
高斯过程 Gaussian Processes 原理、可视化及代码实现
本文解析了高斯过程进行公式推导、原理阐述、可视化以及代码实现,并介绍了高斯过程回归基本原理、超参优化、高维输入等问题。
AI算法与图像处理
2020/11/06
6.3K0
高斯过程 Gaussian Processes 原理、可视化及代码实现
机器学习(16)——EM算法示例
算法思想:含有隐变量的极大似然估计 我们经常会从样本观察数据中,找出样本的模型参数。 最常用的方法就是极大化模型分布的对数似然函数。 但是在一些情况下,我们得到的观察数据有未观察到的隐含数据,此时我们未知的有隐含数据和模型参数,因而无法直接用极大化对数似然函数得到模型分布的参数。怎么办呢?这就是EM算法可以派上用场的地方了。那么先复习一下极大似然估计。 极大似然估计(MLE) 直接举个例子: 某位同学与一位猎人一起外出打猎,一只野兔从前方窜过。只听一声枪响,野兔应声到下,如果要你推测,这一发命中的子弹是谁打
DC童生
2018/04/27
1.6K0
机器学习(16)——EM算法示例
概率论11 协方差与相关系数
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!
Vamei
2018/09/25
1.4K0
概率论11 协方差与相关系数
概率论11 协方差与相关系数
前面介绍的分布描述量,比如期望和方差,都是基于单一随机变量的。现在考虑多个随机变量的情况。我们使用联合分布来表示定义在同一个样本空间的多个随机变量的概率分布。 联合分布中包含了相当丰富的信息。比如从联合分布中抽取某个随机变量的边缘分布,即获得该随机变量的分布,并可以据此,获得该随机变量的期望和方差。这样做是将视线限制在单一的一个随机变量上,我们损失了联合分布中包含的其他有用信息,比如不同随机变量之间的互动关系。为了了解不同随机变量之间的关系,需要求助其它的一些描述量。 协方差 协方差(covariance)
Vamei
2018/01/18
7010
概率论11 协方差与相关系数
FID指标复现踩坑避坑 文本生成图像FID定量实验全流程复现(Fréchet Inception Distance )定量评价实验踩坑避坑流程
在系统运维中,性能调优是确保系统高效运行的关键任务。CPU是系统的核心资源之一,其性能直接影响系统的整体运行速度。内存是系统运行的重要资源,内存不足会导致系统性能下降,甚至崩溃。磁盘I/O性能是系统性能的瓶颈之一,通过优化磁盘I/O,可以显著提升系统性能。这篇文章深入探讨了如何优化CPU、内存和磁盘I/O资源的使用,通过详细的策略和示例代码,帮助您实现系统性能的提升。
中杯可乐多加冰
2024/11/26
3570
二次判别分析(QDA)和Python实现
其中μ为类特有的均值向量,σ为类特有的协方差矩阵。利用贝叶斯定理,我们现在可以计算类后验
deephub
2021/04/16
1.3K1
【数据分析 R语言实战】学习笔记 第六章 参数估计与R实现(上)
BBsolve()@BB:使用Barzilai-Borwein步长求解非线性方程组
统计学家
2019/04/10
2.9K0
【数据分析 R语言实战】学习笔记 第六章 参数估计与R实现(上)
用Python生成随机样本
如何生成一个随机变量/随机向量的随机样本?连续型随机变量离散型随机变量随机向量Markov 链的一个轨道与其极限分布的关系
用户3577892
2020/06/12
6830
用Python生成随机样本
Matplotlib时间序列型图表(2)
在上一篇文章中,我们了解了时间序列图表的绘制方法,效果如下(滑动以浏览),对以往的工作做个总结。目的就是简化大家代码的书写过程,拓宽绘图方法,为科研和商业绘图提供帮助。
python数据可视化之路
2023/02/23
6590
Matplotlib时间序列型图表(2)
Text to Image 文本生成图像定量评价指标分析笔记 Metric Value总结 IS、FID、R-prec等
这里推荐一篇实用的文章:一文彻底弄懂 MySQL 优化:从 Java 后端视角出发。
中杯可乐多加冰
2024/11/25
1970
生成专题1 | 图像生成评价指标 Inception Score (IS)
熵entropy可以被用来描述随机性:如果一个随机变量是高度可预测的,那么它就有较低的熵;相反,如果它是乱序随机的,那么它就是有较高的熵。这和训练分类网络所用的交叉熵是同一个道理。
机器学习炼丹术
2022/03/15
2.2K0
生成专题1 | 图像生成评价指标 Inception Score (IS)
Python AI 教学 | EM算法(Expectation Maximization Algorithm)及应用
假设目前有100个男生和100个女生的身高,共200个数据,但是我们不知道这200个数据中哪个是男生的身高,哪个是女生的身高。假设男生、女生的身高分别服从正态分布,但每个样本从哪个分布抽取的,我们目前是不知道的。这个时候,对于每一个样本,就有两个方面需要猜测或者估计: 这个身高数据是来自于男生还是来自于女生?男生、女生身高的正态分布的参数分别是多少?EM算法要解决的问题正是这两个问题。
用户1621951
2019/10/18
2.1K0
Python AI 教学 | EM算法(Expectation Maximization Algorithm)及应用
深度学习-数学基础
目前主要有两种度量模型深度的方式。第一种方式是基于评估架构所需执行的顺序指令的数目。假设我们将模型表示为给定输入后,计算对应输出的流程图,则可以将这张流程图中的最长路径视为模型的深度。另一种是在深度概率模型中使用的方法,它不是将计算图的深度视为模型深度,而是将描述概念彼此如何关联的图的深度视为模型深度。在这种情况下,计算每个概念表示的计算流程图的深度可能比概念本身的图更深。这是因为系统对较简单概念的理解在给出更复杂概念的信息后可以进一步精细化
范中豪
2019/09/10
8360
深度学习-数学基础
马氏距离 (马哈拉诺比斯距离) (Mahalanobis distance)
马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示点与一个分布之间的距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是,它考虑到各种特性之间的联系,本文介绍马氏距离相关内容。 欧氏距离的缺点 距离度量在各个学科中有着广泛用途,当数据表示为向量\overrightarrow{\mathbf{x} }=\left(x_{1}, x_{2}, \cdots, x_{n}\right)^{T}和\overr
为为为什么
2022/08/05
2.1K0
马氏距离 (马哈拉诺比斯距离) (Mahalanobis distance)
线性判别分析(Linear Discriminant Analysis, LDA) 学习笔记 + matlab实现
线性判别分析 (LDA)是对费舍尔的线性鉴别方法(FLD)的归纳,属于监督学习的方法。LDA使用统计学,模式识别和机器学习方法,试图找到两类物体或事件的特征的一个线性组合,以能够特征化或区分它们。所得的组合可用来作为一个线性分类器,或者,更常见的是,为后续的分类做降维处理。
大鹅
2021/06/16
1.2K0
概率论基础 - 11 - 高斯分布 / 正态分布
本文记录高斯分布。 高斯分布 / 正态分布 正态分布是很多应用中的合理选择。如果某个随机变量取值范围是实数,且对它的概率分布一无所知,通常会假设它服从正态分布。有两个原因支持这一选择: 建模的任务的真实分布通常都确实接近正态分布。 中心极限定理表明,多个独立随机变量的和近似正态分布。 在具有相同方差的所有可能的概率分布中,正态分布的熵最大(即不确定性最大)。 一维正态分布 正态分布的概率密度函数为: p(x)=\frac{1}{\sqrt{2 \pi} \sigma} e{-(x-\mu){2}
为为为什么
2022/08/05
1.6K0
概率论基础 - 11 - 高斯分布 / 正态分布
图像质量评价方法PSNR+SSIM&&评估指标SROCC,PLCC
今天发现ssim的计算里面有高斯模糊,为了快速计算,先对每个小块进行计算,然后计算所有块的平均值。可以参考源代码实现,而且代码实现有近似的在里面!matlab中中图像PSNR和SSIM的计算
全栈程序员站长
2022/09/20
3.8K0
推荐阅读
相关推荐
学习GAN模型量化评价,先从掌握FID开始吧
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档