JAVA实现easyExcel动态生成excel

添加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.vo;import lombok.*;
import lombok.experimental.Accessors;import java.math.BigDecimal;
import java.util.Date;@NoArgsConstructor
@AllArgsConstructor
@Data
@Accessors(chain = true)
public class EasyExcelExportVo {private String name;private Integer age;private Integer height;private BigDecimal weight;private Date birthday;}

执行方法

package com.example.mybatismysql8demo.controller;import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSONObject;
import com.example.mybatismysql8demo.vo.EasyExcelExportVo;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
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.*;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;@Slf4j
@RestController
public class EasyExcelController {@RequestMapping(value = "easyExcelExport", method = RequestMethod.GET)public void easyExcelExport(HttpServletResponse response) {dynamic(response,2);}public void dynamic(HttpServletResponse response,Integer state){if (state == 1){//动态生成exceltry {//动态列值List<String> headName = Arrays.asList("姓名","性别","身高","年龄");List<List<String>> result = new ArrayList<>();headName.forEach(data-> result.add(Collections.singletonList(data)));//告诉浏览器数据格式,将头和数据传到前台response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");response.setHeader("Content-disposition", "attachment;filename=" +  URLEncoder.encode("用户信息表.xls", StandardCharsets.UTF_8));EasyExcel.write(response.getOutputStream()).autoCloseStream(Boolean.FALSE).head(result).sheet("信息表").doWrite(Collections.EMPTY_LIST);//关闭流response.getOutputStream().close();} catch (IOException e) {e.printStackTrace();}}else {//动态导出exceltry {//动态列值Map<Integer,Object> map = getField();List<String> headName = (List<String>) map.get(1);List<List<String>> result = new ArrayList<>();headName.forEach(data->{//添加标题result.add(Lists.newArrayList("用户信息",data));});//数据List<List<Object>> data = (List<List<Object>>) map.get(2);//告诉浏览器数据格式,将头和数据传到前台response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");response.setHeader("Content-disposition", "attachment;filename=" +  URLEncoder.encode("用户信息表.xls", StandardCharsets.UTF_8));EasyExcel.write(response.getOutputStream()).autoCloseStream(Boolean.FALSE).head(result).sheet("信息表").doWrite(data);//关闭流response.getOutputStream().close();} catch (IOException e) {e.printStackTrace();}}}public static Map<Integer,Object> getField(){//前端配置动态字段,存储数据库String fields = "[{\"field\":\"age\",\"text\":\"年龄\"},{\"field\":\"height\",\"text\":\"身高\"},{\"field\":\"name\",\"text\":\"姓名\"},{\"field\":\"weight\",\"text\":\"体重\"}]";List<Map> mapList = JSONObject.parseArray(fields,Map.class);//字段名称List<String> fieldList = mapList.stream().map(v -> v.get("text").toString()).collect(Collectors.toList());//字段属性名称List<String> fieldNames = mapList.stream().map(v -> v.get("field").toString()).collect(Collectors.toList());//获取数据List<EasyExcelExportVo> data = getDateList();//数据处理List<List<Object>> list = new ArrayList<>();data.forEach(value->{//将对象转换为mapMap<String, Object> mapInfo = BeanUtil.beanToMap(value);//遍历动态字段值List<Object> objectList = new ArrayList<>();fieldNames.forEach(key->{objectList.add(mapInfo.get(key));});list.add(objectList);});Map<Integer,Object> map = new HashMap<>(2);map.put(1,fieldList);map.put(2,list);return map;}public static void main(String[] args) {System.out.println(getField());}public static List<EasyExcelExportVo> getDateList(){List<EasyExcelExportVo> info = new ArrayList<>();Collections.addAll(info,new EasyExcelExportVo().setName("张三").setAge(18).setHeight(160).setWeight(new BigDecimal(100)).setBirthday(new Date()),new EasyExcelExportVo().setName("李四").setAge(18).setHeight(160).setWeight(new BigDecimal(100)).setBirthday(new Date()),new EasyExcelExportVo().setName("王五").setAge(18).setHeight(160).setWeight(new BigDecimal(100)).setBirthday(new Date()),new EasyExcelExportVo().setName("小明").setAge(20).setHeight(180).setWeight(new BigDecimal(120)).setBirthday(new Date()));return info;}}

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

丰富企业远控业务生态,向日葵开放多种远程控制API集成方案

随着远程控制技术不断应用在企业远程办公、IT运维、技术支持等场景中&#xff0c;他已经逐渐成为了企业软件工具中不可或缺的一种。随着企业远控需求的不断普及深入&#xff0c;市场也对远程控制解决方案最终实现的“形态”提出了更高的要求。 作为国民级远程控制品牌&#xf…

软件工程的介绍

软件工程 这一章的内容其实还是蛮多的,大概一共有10个章节,分别是下面的一些内容,但是呢,这一章的内容其实是比较偏向文科类的,也就是说,记忆的内容其实占有很大的篇幅,在该考试科目当中呢,其实也是主要影响上午题部分的选择题的考察,基本的分值呢,在10分左右,分值占…

【大数据】分布式数据库HBase

目录 1.概述 1.1.前言 1.2.数据模型 1.3.列式存储的优势 2.实现原理 2.1.region 2.2.LSM树 2.3.完整读写过程 2.4.master的作用 1.概述 1.1.前言 本文式作者大数据系列专栏中的一篇文章&#xff0c;按照专栏来阅读&#xff0c;循序渐进能更好的理解&#xff0c;专栏…

【学习笔记之vue】vue项目放在springboot项目里后,刷新页面会显示whitelabel error page

vue项目放在springboot项目里后&#xff0c;刷新页面会显示whitelabel error page。 解决方案: 当你在Spring Boot项目中嵌入Vue项目&#xff0c;并且刷新页面时遇到了“Whitelabel Error Page”&#xff0c;这通常意味着Spring Boot后端没有正确地处理前端路由的请求。Vue.j…

免费分享一套SpringBoot+Vue家政服务管理平台管理系统,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue家政服务管理平台管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue家政服务管理平台系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue家政服务管理平台系统 Ja…

java根据六根数文件生成星下点数据,实现轨道预测

目录 一、测试数据 二、jar使用步骤 &#xff08;一&#xff09;创建实例 &#xff08;二&#xff09;调用方法生成星下点数据 简介&#xff1a;java六根数数据&#xff0c;生成星下点数据。星下点轨迹计算可以帮助我们了解天体之间的相互作用,预测天体在未来的某一时刻所处…

制糖工业智能工厂数字孪生可视化平台,推进制糖产业数字化转型

制糖工业智能工厂数字孪生可视化平台&#xff0c;推进制糖产业数字化转型。随着信息技术的快速发展&#xff0c;数字化转型已成为各行各业的重要趋势。在糖果加工制造领域&#xff0c;智能工厂数字孪生可视化平台的出现&#xff0c;为行业数字化转型注入了新的活力。 糖果加工制…

2024 OceanBase 开发者大会:OceanBase 4.3正式发布,打造近PB级实时分析数据库

4月20日&#xff0c;2024 OceanBase开发者大会盛大召开&#xff0c;吸引了50余位业界知名的数据库专家和爱好者&#xff0c;以及来自全国各地的近600名开发者齐聚一堂。他们围绕一体化、多模、TP与AP融合等前沿技术趋势展开深入讨论&#xff0c;分享场景探索的经验和最佳实践&a…

​解析什么是物联网接入网关?-天拓四方

随着物联网技术的飞速发展&#xff0c;越来越多的设备、传感器和系统被连接到互联网&#xff0c;形成了一个庞大的、相互连接的智能网络。在这个网络中&#xff0c;物联网接入网关扮演着至关重要的角色&#xff0c;它不仅是连接物联网设备和云平台的桥梁&#xff0c;还是实现设…

揭秘主播们美颜工具:直播美颜SDK背后的技术架构

美颜工具的背后&#xff0c;是一个复杂而精密的技术架构&#xff0c;被称为直播美颜SDK。今天&#xff0c;小编将深入探秘这一技术架构的内部机制&#xff0c;揭示主播们所使用的美颜工具背后的秘密。 一、美颜SDK的基本原理 美颜SDK是一种软件开发工具包&#xff0c;主要用于…

【定制化体验:使用Spring Boot自动配置,打造个性化Starter】

项目结构 Pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4…

STM32存储左右互搏 SDIO总线FATS文件读写SD/MicroSD/TF卡

STM32存储左右互搏 SDIO总线FATS文件读写SD/MicroSD/TF卡 SD/MicroSD/TF卡是基于FLASH的一种常见非易失存储单元&#xff0c;由接口协议电路和FLASH构成。市面上由不同尺寸和不同容量的卡&#xff0c;手机领域用的TF卡实际就是MicroSD卡&#xff0c;尺寸比SD卡小&#xff0c;而…