JAVA实现easyExcel模版导出

easyExcel文档

模板注意:

  • 用 {} 来表示你要用的变量 ,如果本来就有"{“,”}" ,特殊字符用"{“,”}"代替
  • {} 代表普通变量
  • {.}代表是list的变量

添加pom依赖

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version>
</dependency><!--工具类-->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.1</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.21</version>
</dependency>

第一种:简单模版导出

实体类

package com.example.mybatismysql8demo.excel;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;import java.io.Serializable;
import java.math.BigDecimal;@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Data
public class TemplateGoodsExcel implements Serializable {private String goodsName;private Integer num;private BigDecimal price;public TemplateGoodsExcel(String goodsName, BigDecimal price, Integer num) {this.goodsName = goodsName;this.price = price;this.num = num;}}

导出模版
在这里插入图片描述

执行方法

package com.example.mybatismysql8demo.controller;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.example.mybatismysql8demo.excel.TemplateGoodsExcel;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;@RestController
public class EasyExcelController {/*** 本地下载* @param args*/public static void main(String[] args) {//模版路径String path = "E:\\模板\\商品.xls";//文件下载路径String fileName = "E:\\" + System.currentTimeMillis() + ".xls";//数据List<TemplateGoodsExcel> data = new ArrayList<>();data.add(new TemplateGoodsExcel("苹果",new BigDecimal(10),100));data.add(new TemplateGoodsExcel("香蕉",new BigDecimal(8),200));ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(path).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();//列表数据excelWriter.fill(data, writeSheet);//基础数据Map<String, Object> map = new HashMap<>(2);map.put("goodsName", "商品信息");excelWriter.fill(map, writeSheet);excelWriter.finish();}/*** 浏览器下载* @param response*/@RequestMapping(value = "easyExcelExport", method = RequestMethod.GET)private void browserDownload(HttpServletResponse response){OutputStream out = null;try {out = getOutputStream("商品信息",response);ExcelWriter excelWriter =  EasyExcel.write(out).withTemplate("E:\\模板\\商品.xls").excelType(ExcelTypeEnum.XLS).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();//列表数据List<TemplateGoodsExcel> data = new ArrayList<>();data.add(new TemplateGoodsExcel("苹果",new BigDecimal(10),100));data.add(new TemplateGoodsExcel("香蕉",new BigDecimal(8),200));excelWriter.fill(data, writeSheet);//基础数据Map<String,Object> map = new HashMap<>(1);map.put("goodsName", "商品信息");excelWriter.fill(map, writeSheet);excelWriter.finish();} finally {try {if (out != null){out.flush();out.close();}} catch (IOException e) {System.out.println(e.getMessage());}}}/*** 此段代码是工具类ExcelUtils中的 用于输出Excel流*/private OutputStream getOutputStream(String fileName, HttpServletResponse response) {try {fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf8");response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xls");response.setHeader("Pragma", "public");response.setHeader("Cache-Control", "no-store");response.addHeader("Cache-Control", "max-age=0");return response.getOutputStream();} catch (IOException e) {System.out.println(e.getMessage());}return null;}}

在这里插入图片描述

第二种:复杂模版导出

导出模版
在这里插入图片描述

执行方法

package com.example.mybatismysql8demo.controller;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.example.mybatismysql8demo.excel.TemplateGoodsExcel;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;@RestController
public class EasyExcelController {/*** 浏览器下载* @param response*/@RequestMapping(value = "easyExcelExport", method = RequestMethod.GET)private void browserDownload(HttpServletResponse response){OutputStream out = null;try {out = getOutputStream("商品信息",response);ExcelWriter excelWriter =  EasyExcel.write(out).withTemplate("E:\\模板\\商品.xls").excelType(ExcelTypeEnum.XLS).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();//这里注意入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。//forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用//简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();//列表数据List<TemplateGoodsExcel> data = new ArrayList<>();data.add(new TemplateGoodsExcel("辣条",new BigDecimal(10),100));data.add(new TemplateGoodsExcel("娃哈哈",new BigDecimal(8),200));List<TemplateGoodsExcel> data2 = new ArrayList<>();data2.add(new TemplateGoodsExcel("葡萄",new BigDecimal(16),50));data2.add(new TemplateGoodsExcel("榴莲",new BigDecimal(30),10));//如果有多个list 模板上必须有{前缀.} 这里的前缀就是 data1,然后多个list必须用 FillWrapper包裹excelWriter.fill(new FillWrapper("dataOne", data), fillConfig, writeSheet);excelWriter.fill(new FillWrapper("dataTwo", data2), fillConfig, writeSheet);//基础数据Map<String,Object> map = new HashMap<>(1);map.put("goodsName", "食品信息");map.put("name", "水果信息");map.put("date", "2019年10月9日13:28:28");excelWriter.fill(map, writeSheet);excelWriter.finish();} finally {try {if (out != null){out.flush();out.close();}} catch (IOException e) {System.out.println(e.getMessage());}}}/*** 此段代码是工具类ExcelUtils中的 用于输出Excel流*/private OutputStream getOutputStream(String fileName, HttpServletResponse response) {try {fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf8");response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xls");response.setHeader("Pragma", "public");response.setHeader("Cache-Control", "no-store");response.addHeader("Cache-Control", "max-age=0");return response.getOutputStream();} catch (IOException e) {System.out.println(e.getMessage());}return null;}}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/316081.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker有哪些常见命令?什么是Docker数据卷?

喜欢就点击上方关注我们吧&#xff01; 哈喽&#xff0c;大家好呀&#xff01;这里是码农后端。上一篇我们介绍了Docker的安装以及腾讯云镜像加速源的配置。本篇将带你学习Docker的常见命令、数据卷及自定义镜像等相关知识。 1、什么是镜像与容器&#xff1f; 利用Docker安装应…

电容的理论基础

目录 1.电容的本质&#xff1a; 2.电容量的大小 2.1电容的单位 2.2电容的决定式 ​编辑3.电容的特点 5.电容器的类型 6.电容实际的电路模型 7.安装方法 ​编辑8.电容值 9.电容的耐压、封装 10.阻抗-频率特性 11.频率特性 12.等效串联电组ESR 13.电容器的温度特性…

MATLAB 数据类型

MATLAB 数据类型 MATLAB 不需要任何类型声明或维度语句。每当 MATLAB 遇到一个新的变量名&#xff0c;它就创建变量并分配适当的内存空间。 如果变量已经存在&#xff0c;那么MATLAB将用新内容替换原始内容&#xff0c;并在必要时分配新的存储空间。 例如&#xff0c; Tota…

命令执行。

命令执行 在该项目的readme中&#xff0c;描述了怎么去调用的flink 通过java原生的runtime来调用flink&#xff0c;下一步就是去看看具体的调用过程了&#xff0c;是否存在可控的参数 找到具体提交命令的类方法CommandRpcClinetAdapterImpl#submitJob() 这里要确定command&am…

TiDB 6.x 新特性解读 | Collation 规则

对数据库而言&#xff0c;合适的字符集和 collation 规则能够大大提升使用者运维和分析的效率。TiDB 从 v4.0 开始支持新 collation 规则&#xff0c;并于 TiDB 6.0 版本进行了更新。本文将深入解读 Collation 规则在 TiDB 6.0 中的变更和应用。 引 这里的“引”&#xff0c;…

用Redis实现获取验证码,外加安全策略

安全策略 一小时内只能获取三次&#xff0c;一天内只能获取五次 Redis存储结构 代码展示 import cn.hutool.core.util.RandomUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; import org.spri…

SD8942 600KHz、16V、2A同步降压转换器芯片IC

一般说明 该SD8942是一个完全集成&#xff0c;高效率2A同步整流降压转换器。SD8942在宽输出电 流负载范围内以高效率运行。该器件提供两种工作模式&#xff0c;PWM控制和PFM模式开关控制&#xff0c;它允许在更宽的负载范围内的高效率。 该SD8942需要一个现成的标…

Flink面试(1)

1.Flink 的并行度的怎么设置的&#xff1f; Flink设置并行度的几种方式 1.代码中设置setParallelism() 全局设置&#xff1a; 1 env.setParallelism(3);  算子设置&#xff08;部分设置&#xff09;&#xff1a; 1 sum(1).setParallelism(3) 2.客户端CLI设置&#xff0…

电脑开机后卡在开机LOGO画面如何排查处理

当电脑开机后长时间停滞在开机LOGO画面,无法继续进入操作系统,这一现象常令用户困扰不已。本文将深入探讨导致此类问题的多种可能原因,并提供相应的解决方法,帮助你有效地诊断和排除故障。 硬件故障或接触不良 1. 硬盘问题:硬盘是系统启动的关键组件,其故障或数据线接触…

大数据分析与应用实验(黑龙江大学)

实验一 Hadoop伪分布式实验环境搭建与WordCount程序 一、实验目的 1、学习搭建Hadoop伪分布式实验环境 2、在伪分布式实验环境下运行WordCount程序 二、实验内容 1、搭建Hadoop伪分布式实验环境&#xff0c;并安装Eclipse。 2、在Eclipse环境下&#xff0c;编写并执行Wor…

MongoDB的安装(Linux环境)

登录到Linux服务器执行 lsb_release -a &#xff0c;即可得知服务器的版本信息为&#xff1a;CentOS 7。 # CentOS安装lsb_release包 [rootlinux100 ~]# sudo yum install redhat-lsb# 查看Linux版本 [rootlinux100 ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-…

网络服务SSH-远程访问及控制

一.SSH远程管理 1.SSH介绍 SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;最早是由芬兰的一家公司开发出来&#xff0c;并且在IETF &#xff08;Internet Engineering Task Force&#xff09;的网络草案基础上制定而成的标准协议。主要用来实现字符…

IP地址的定位精度及其影响因素

IP地址作为互联网通信的基础&#xff0c;其定位精度对于许多应用至关重要&#xff0c;如网络安全、市场营销和用户定位等。然而&#xff0c;IP地址的定位精度受到多种因素的影响&#xff0c;本文将探讨这些因素以及它们对IP地址定位精度的影响。 IP地址查询&#xff1a;IP66_i…

windows ubuntu sed,awk,grep篇,8,Awk 语法和基础命令

目录 51.Awk 命令语法 52.Awk 程序结构(BEGIN,body,END)区域 53.打印命令 54.模式匹配 Awk 是一个维护和处理文本数据文件的强大语言。在文本数据有一定的格式&#xff0c;即每行数据包 含多个以分界符分隔的字段时&#xff0c;显得尤其有用。即便是输入文件没有一定的格式&a…

sCrypt全新上线RUNES功能

sCrypt智能合约平台全新上线一键etch/mint RUNES功能&#xff01; 请访问 https://runes.scrypt.io/ 或点击阅读原文体验&#xff01; 关于sCrypt sCrypt是BSV区块链上的一种智能合约高级语言。比特币使用基于堆栈的Script语言来支持智能合约&#xff0c;但是用原生Script编…

微信小程序实时日志使用,setFilterMsg用法

实时日志 背景 为帮助小程序开发者快捷地排查小程序漏洞、定位问题&#xff0c;我们推出了实时日志功能。开发者可通过提供的接口打印日志&#xff0c;日志汇聚并实时上报到小程序后台。开发者可从We分析“性能质量->实时日志->小程序日志”进入小程序端日志查询页面&am…

《异常检测——从经典算法到深度学习》27 可执行且可解释的在线服务系统中重复故障定位方法

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

AI 工具合集

以下工具来源于互联网&#xff0c;可能会失效&#xff0c;请参考使用 网红工具 名称链接说明GPT-4https://chat.openai.com/ 需要梯子&#xff0c;需要付费。功能最强大的聊天机 器人。 文心一言https://yiyan.baidu.com/welcome 国内版 GPT&#xff0c;需要申请账号。回答问…

ChromaDB教程

使用 Chroma DB&#xff0c;管理文本文档、将文本嵌入以及进行相似度搜索。 随着大型语言模型 &#xff08;LLM&#xff09; 及其应用的兴起&#xff0c;我们看到向量数据库越来越受欢迎。这是因为使用 LLM 需要一种与传统机器学习模型不同的方法。 LLM 的核心支持技术之一是…

IDEA使用技巧(常用设置、快捷键等)

IDEA使用技巧 一、IDEA常用基本设置设置代码背景颜色/主题/字体Ctrl鼠标滚轮缩放字体大小设置字符编码左右两侧的Project&#xff0c;Structure&#xff0c;Maven等按钮消失新增类似sout,psvm的模版切换某个模块编译的JDK版本 二、常用快捷键CtrlAltT包裹代码Alt回车联想补全Ct…