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;
    }

}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记一次数据查询问题

背景: 有一个数据表,适用原始查询就能查到数据 select * from t_easy_barcode where FP01 = panel_jitaix32_2024_04_25_10_29_57 当我把表中数据列重命名之后sql如下: 因此 我先统计了一下数据表中数据有多少,查询发现有 2482872条 因此首先想到的问题是查询一…

【机器学习】特征筛选实例与代码详解

机器学习中的特征筛选 一、特征筛选的重要性与基本概念二、特征筛选的方法与实践1. 基于统计的特征筛选2. 基于模型的特征筛选3. 嵌入式特征筛选 三、总结与展望 在机器学习领域&#xff0c;特征筛选作为预处理步骤&#xff0c;对于提高模型性能、简化模型结构以及增强模型解释…

是时候了解替代FTP传文件的最优传输方案了

目前越来越多的企业在寻找替代FTP传文件的方案&#xff0c;主要原因在于其固有的一些弊端&#xff0c;在现代企业数据传输需求中可能导致安全性、效率和可靠性方面的问题。以下是FTP的一些主要弊端&#xff1a; 1.数据传输不加密&#xff1a;FTP在传输过程中不加密数据&#xf…

Mybatis入门(入门案例,IDEA配置SQL提示,JDBC介绍,lombok介绍)

目录 一、Mybatis入门案例介绍整体步骤创建SpringBoot项目pom依赖准备测试数据新建实体类配置Mybatis数据库连接信息新建接口类,编写SQL代码单元测试 二、IDEA配置SQL提示三、JDBC是什么案例JDBC和Mybatis对比 四、数据库连接池介绍如何实现一个数据库连接池切换数据库连接池 五…

commvault学习(6):备份oracle(包括oracle的安装)

1.环境 CS、MA&#xff1a;一台windows server2012 客户端&#xff1a;2台安装了oracle11g的windows server2008 1.1 windows server2008安装oracle11g &#xff08;1&#xff09;右击安装包内的setup&#xff0c;以管理员方式运行 &#xff08;2&#xff09;取消勾选接收安…

前端学习<四>JavaScript——48-jQuery动画详解

前言 jQuery提供的一组网页中常见的动画效果&#xff0c;这些动画是标准的、有规律的效果&#xff1b;同时还提供给我们了自定义动画的功能。 显示动画 方式一&#xff1a; <span style"background-color:#f8f8f8"><span style"color:#333333"…

Qt 把.exe打包成安装文件形式

目录 1.下载工具 Qt Installer Framework2.将bin文件添加到环境变量3.拷贝startmenu示例-备用4.准备Qt Release打包好的程序5.把Release打包好的程序放到packages\org.qtproject.ifw.example\data文件夹下6.生成安装包7.修改安装包图标8.修改主程序程序安装引导-创建快捷键9.添…

【重磅】刚刚,《学位法》通过!!!2025年1月1日起施行!

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

JetBot手势识别实验

实验简介 本实验目的在JetBot智能小车实现手势识别功能&#xff0c;使用板卡为Jetson Nano。通过小车摄像头&#xff0c;识别五个不同的手势&#xff0c;实现小车的运动及灯光控制。 1.数据采集 连接小车板卡的Jupyterlab环境&#xff0c;运行以下代码块&#xff0c;配置数据…

rust 卸载重新安装 安装

原因&#xff1a;接触区块链时报错 linking with x86_64-w64-mingw32-gcc failed: exit code: 1 Rust编译需要C环境&#xff0c;如果你没有&#xff0c;Rust也能安装成功&#xff0c;只是无法编译代码 C的编译工具有两个&#xff0c;一个是msvc&#xff0c;也就是visual studi…

pytest-xdist:远程多主机 - 分布式运行自动化测试

简介&#xff1a;pytest-xdist插件使用新的测试执行模式扩展了pytest&#xff0c;最常用的是在多个CPU之间分发测试以加快测试执行&#xff0c;即 pytest -n auto同时也是一个非常优秀的分布式测试插件&#xff0c;分别支持ssh和socket两种方式实现master和worker的远程通讯。…

【ensp实验】路由过滤与引入

要求&#xff1a; 1、按照图示配置IP地址&#xff0c;R1, R3&#xff0c;R4上使用loopback 口模拟业务网段&#xff1b; 2、R1和R2运行RIPv2&#xff0c;R2&#xff0c;R3和R4运行OSPF&#xff0c;各自协议内部互通&#xff1b; 3、在RIP和OSPF间配置双向路由引入&#xff0c;要…

imutils包

imutils是Adrian Rosebrock开发的一个python工具包&#xff0c;它整合了opencv、numpy和matplotlib的部分操作&#xff0c;使这些操作更加简便快捷。今天我们将对它的部分功能进行介绍&#xff0c;以便大家在今后的学习工作中&#xff0c;能够灵活运用好imutils包。 安装 当我们…

Idea 21版本 解决Service 控制台启动类不显示端口

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 1.关闭idea&#xff0c;结束进程 2.找到 C:\用户\你的用户名\AppData\Local\Temp 删除&#xff08;hsperfdata_大健康&#xff09;文件 说明&#xff08;hsperfdata_大健康&#xff09; 后面三个中文是…

庐山研习班上介绍的25个LINUX工具

从2013年的第一届算起&#xff0c;庐山研习班走过十余个年头&#xff0c;办了十几次了。但每一次&#xff0c;都有很多不一样。即使是相同的主题&#xff0c;也有很大差异。 今年春季的庐山研习班是在上个周末。周四晚上我和大部分同学都到了五老峰脚下的训练基地。 除了周六下…

【可下载】CDA 1级教材《精益业务数据分析》2023最新版

CDA一级认证教材&#xff1a;《精益业务数据分析》 全面、系统地讲述业务描述性分析为企业决策行为创造价值的全流程技能&#xff0c;涵盖描述性数据分析方法、业务分析方法、数据分析结果应用方法等内容。 条理清晰的结构、通俗易懂的语言、完整立体的知识框架为读者铺开一幅…

Vite 热更新(HMR)原理了解一下

❝ 幸福的三大要素是&#xff1a;有要做的事&#xff08;something to do&#xff09;、有要爱的人&#xff08;someone to love&#xff09;、有寄予希望的东西&#xff08;something to hope for&#xff09; ❞ 大家好&#xff0c;我是「柒八九」。一个「专注于前端开发技术…

CK_Label_V15

CK_Label_v15&#xff08;外接供电版&#xff09; 产品型号 CK_Label_v15 尺寸 63*14.6*7.9mm 按键 0 指示灯 1 RGB&#xff08;7种(红/绿/蓝/黄/紫/白/青)&#xff09; 通信方式 无线通信 工作频段 868MHz 供电方式 24V外接供电 电池容量 300mAh 电池寿命 …

第⑰讲:Ceph集群各组件的配置参数调整

文章目录 1.Ceph集群各组件的配置文件1.1.Ceph各组件配置方式1.2.ceph临时查看、修改配置参数的方法 2.调整Monitor组件的配置参数删除Pool资源池2.1.临时调整配置参数2.2.永久修改配置参数 1.Ceph集群各组件的配置文件 1.1.Ceph各组件配置方式 Ceph集群中各个组件的默认配置…

IDEA中配置使用maven和配置maven的中央仓库

1 以汉化后的IDEA为例配置maven 打开idea选择文件 选择 设置 点击>构建.执行.部署 点击>构建工具 点击>Maven 其中Maven主路径 就是我们maven下载解压后的路径 可以通过边上的三个点选择你解压后的绝对路径&#xff0c;也可以直接把解压后的绝对路劲复制过来 以下…