JAVA实现easyExcel模版导出

news/2024/10/9 15:21:35/

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>

第一种:简单模版导出

实体类

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

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

执行方法

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

在这里插入图片描述

第二种:复杂模版导出

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

执行方法

java">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.ppmy.cn/news/1438551.html

相关文章

38. 【Android教程】Handler 消息传递机制

跑在主线程&#xff08;即UI线程&#xff09;当中的&#xff0c;而且所有的 UI 刷新以及输入处理必须在主线程中执行。这样一旦任务多了就会阻塞 UI 线程导致画面卡顿&#xff0c;从而严重影响性能&#xff0c;所以正确的做法是将耗时的操作单独放在子线程中与 UI 线程隔离&…

前端调用DRI后端API出现跨域资源共享(CORS)问题解决办法

目录 1. 引言2. 跨源资源共享和实现方法3. 在Django项目中配置django-cors-headers库Reference 1. 引言 在进行后端API开发时&#xff0c;有时会遇到“跨域资源共享 (CORS) 请求…被阻止“的错误&#xff0c;如图1所示。本文讲解如何在使用DRF&#xff08;Django REST Framewo…

Android Studio修改“choose boot runtime for the IDE“后无法打开

在Android Studio中选择了"choose boot runtime for the IDE"的New后&#xff0c;会自动重启AS&#xff0c;然后就无法打开android studio了&#xff0c;打开直接报错&#xff0c;cause by如下 Unable to make field protected java.lang.Runnable java.awt.event.In…

软件设计师-重点的创建型设计模式

一、简单工厂&#xff1a; 简单工厂模式属于创建型模式&#xff0c;但不属于23种设计模式之一。 软考中图 二、工厂方法&#xff1a; 意图&#xff1a; 定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 结…

AI Agent新对决:LangGraph与AutoGen的技术角力

AI Agent变革未来&#xff0c;LangGraph对抗AutoGen ©作者|Blaze 来源|神州问学 引言 比尔.盖茨曾在他的博客上发表一篇文章&#xff1a;《AI is about to completely change how you use computers》。在文章中&#xff0c;比尔盖茨探讨AI Agent对我们未来生活的巨大影…

System Dashboard for Mac:强大的系统监控与管理工具

System Dashboard for Mac是一款专为苹果电脑设计的系统监控与管理工具&#xff0c;以其直观易用的界面和全面的功能&#xff0c;深受用户喜爱。 System Dashboard for Mac v1.10.11激活版下载 这款软件能够实时监测系统的重要参数&#xff0c;包括CPU使用率、内存利用率、硬盘…

Flink面试(1)

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

BUUCTF中的web

目录 [HCTF 2018]WarmUp 1 解题过程&#xff1a; 1.先查看页面的源代码&#xff0c;发现有source.php文件 2.访问这个php文件,发现是解读这个php代码 3. 在代码中看到hint.php文件&#xff0c;访问来看看 4.很明显的文件包含&#xff0c;现在来构造payload:url?filehint…