当前位置: 首页 > news >正文

easyexcel poi根据模板导出Excel

1.导入依赖

<!--    poi依赖-->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version>
</dependency>
<!--    poi对于excel 2007的支持依赖-->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version>
</dependency>
<!--    poi对于excel 2007的支持依赖-->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.0.1</version>
</dependency>

2.代码实现

package com.example.exceldemo;import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.core.io.ClassPathResource;import java.io.*;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;public class EasyExcelTest {public static void main(String[] args) throws Exception {InputStream fis = null;OutputStream outputStream= null;Workbook wb = null;try {String fileName = "测试单位"+ UUID.randomUUID() + ".xlsx";String filePath = "D:\\report\\"+fileName;//1.获取数据List<ExcelVo> list = new ArrayList<>();list.add(new ExcelVo(1,"1221","黄山"));list.add(new ExcelVo(2,"3333","河水"));list.add(new ExcelVo(3,"6666","青石"));//2.获取模板fis = new ClassPathResource("templates/report_template.xlsx").getInputStream();File file=new File(filePath);if (!file.exists()) {file.createNewFile();}outputStream = new FileOutputStream(file);//3.根据模板创建工作簿wb = new XSSFWorkbook(fis);//4.读取工作表Sheet sheet = wb.getSheetAt(0);CellStyle styles[] = new CellStyle[row.getLastCellNum()];//5.抽取第2行的公共样式 , 因为第一行 为标题 第2行是数据 下标为1Row row = sheet.getRow(1);CellStyle styles[] = new CellStyle[row.getLastCellNum()];Cell cell = null;for (int i = 0; i < row.getLastCellNum(); i++) {cell = row.getCell(i);styles[i] = cell.getCellStyle();}//5.构造单元格int rowIndex=1;//方式一 手动for (ExcelVo vo2:list) {//创建每一行,同excel的第二行开始row= sheet.createRow(rowIndex++);//第一列int i=0;cell = row.createCell(i++);cell.setCellStyle(styles[0]);cell.setCellValue(vo2.getId());//写入数据 序号//第二列cell = row.createCell(i++);cell.setCellStyle(styles[0]);cell.setCellValue(vo2.getCode());//第三列(注:最后一列不用i++,前面的必须i++)cell = row.createCell(i);cell.setCellStyle(styles[0]);cell.setCellValue(vo2.getName());}//方式二 动态for (ExcelVo t:list) {//创建每一行,同excel的第二行开始row = sheet.createRow(rowIndex++);Field[] fields=t.getClass().getDeclaredFields();//获取filedfor (int i = 0; i < fields.length; i++) {Field field=fields[i];field.setAccessible(true);//设置私有属性可以访问Object val = field.get(t);//获取值if (val==null)val="";cell = row.createCell(i);cell.setCellStyle(styles[0]);//设置单元格样式cell.setCellValue(val.toString());//写入数据}}wb.write(outputStream);//写入数据} catch (Exception e) {throw new Exception(e);} finally {fis.close();wb.close();outputStream.close();}}
}

3.模板

在这里插入图片描述

参考:https://blog.csdn.net/weixin_45742032/article/details/119593288?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-119593288-blog-86538258.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-119593288-blog-86538258.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=2

相关文章:

easyexcel poi根据模板导出Excel

1.导入依赖 <!-- poi依赖--> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version> </dependency> <!-- poi对于excel 2007的支持依赖--> <dependency…...

怎么把pdf图片转换成jpg?pdf转jpg的方法分享

pdf文件在我们的日常工作中非常的常见&#xff0c;因为这种文件安全性高&#xff0c;不会轻易的乱码&#xff0c;所以受到了我们的欢迎&#xff0c;但是它不容易被编辑&#xff0c;而且占用内存会比较大&#xff0c;所以我们需要将pdf文件进行转换&#xff0c;接下来小编会为大…...

MongoDB 双机热备那篇文章是 “毒”

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 liuaustin3 &#xff08;…...

Leetcode17电话号码的组合

思路&#xff1a;用字典的形式保存号码的映射&#xff0c;实际组合是前一个数字串的组合加上后面一个数字的所有可能组合 answer_dict{2:[a,b,c],3:[d,e,f],4:[g,h,i],5:[j,k,l],6:[m,n,o],7:[p,q,r,s],8:[t,u,v],9:[w,x,y,z]} class Solution:def letterCombinations(self, d…...

入职一家公司只会功能测试,如何进一步提升自己?

一定要帮助想上进却又迷茫的人。最近也听到一些做功能测试的同学的交流&#xff0c;天天做手工测试&#xff0c;想提升一下自己又不知道如何提升&#xff1f;其实还是在于这些同学对自己没有一个清晰的定位&#xff0c;没有明确的目标。 做为功能测试人员来讲&#xff0c;从发…...

WordPress导航主题源码

源码说明&#xff1a; V2.0406 添加搜索自动索引百度热搜关键词 添加首页tab标签模式加载方式切换(ajax加载和普通加载)(首页设置) 修复tab标签ajax加载模式会显示未审核的网址的bug 小屏幕热搜采用水平滚动 优化子主题支持 添加文章分页 添加解决WordPress 429的服务(…...

基于ADAU1452 DSP ANC和AEC算法的实现

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?加我微信hezkz17, 本群提供音频技术答疑服务,+群附加赠送,DSP音频项目核心开发资料, 1 使用Sigma中的NLMS算法模块 对应C源代码:...

Wireshark数据抓包分析之传输层协议(TCP协议)

一、实验目的&#xff1a; 通过使用wireshark对TCP协议的数据包的抓取分析TCP协议的具体内容 二、预备知识: 1.需要了解TCP协议的三次握手过程 2.需要了解TCP协议的四次挥手的过程 三、网络拓扑 四、实验过程&#xff1a; part1&#xff1a;3次握手和4次挥手的数据包的获取 …...

ADRV9009子卡 设计原理图:FMCJ450-基于ADRV9009的双收双发射频FMC子卡 便携测试设备

FMCJ450-基于ADRV9009的双收双发射频FMC子卡 一、板卡概述 ADRV9009是一款高集成度射频(RF)、捷变收发器&#xff0c;提供双通道发射器和接收器、集成式频率合成器以及数字信号处理功能。北京太速科技&#xff0c;这款IC具备多样化的高性能和低功耗组合&#xff0c;FMC子…...

Linux 桌面上的 Firefox 面临着大问题

导读毫无疑问&#xff0c;无论是在桌面、笔记本电脑还是移动设备上&#xff0c;浏览器都是任何操作系统中最重要的应用之一。 如果没有一个功能强大、快速且稳定的浏览器&#xff0c;操作系统的实用性将大幅度降低&#xff0c;以至于我相当确定&#xff0c;如果一个操作系统没有…...

查漏补缺 - 构造函数,原型,this,原型链,继承

目录 1&#xff0c;构造函数2&#xff0c;原型3&#xff0c;this4&#xff0c;原型链1&#xff0c;特点2&#xff0c;Object.prototype.toString()3&#xff0c;instanceof 运算符4&#xff0c;Object.getPrototypeOf()5&#xff0c;创建空原型对象6&#xff0c;面试题 5&#…...

C# 学习笔记--个人学习使用 <2>

C# 学习笔记 Chapter 2 比较硬的基础部分Section 1 委托Part 1 Action 与 func 委托的示例Part 2 自定义委托Part 3 委托的一般使用Part 4 委托的高级使用Part 5 适时地使用接口 Interface 取代一些对委托的使用 Section 2 事件Part 1 初步了解事件Part 2 事件的应用Part 3 事件…...

Linux网络编程Socket通信6-Libevent移植与使用

目录 libeventlibevent交叉编译并移植libevent安装安装步骤测试代码libevent执行报错解决 libevent_base根节点event_base_newevent_base_freeevent_reinit event_loop循环等待事件event_base_loopevent_base_dispatchevent_base_loopexitevent_base_loopbreak event事件event_…...

c#:委托 泛型委托的使用 泛型约束

委托 在 C# 中&#xff0c;delegate 是一种引用类型&#xff0c;它允许您定义和使用可以引用特定方法的对象。delegate 可以看作是一种函数指针&#xff0c;它可以在运行时动态地调用不同的方法。 以下是一个简单的例子来说明 delegate 的实际作用&#xff1a; // 1. 定义一…...

大数据之linux入门

一、linux是什么 linux操作系统 开发者是林纳斯-托瓦兹&#xff0c;出于个人爱好编写。linux是一个基于posix和unix的多用户、多任务、支持多线程和多CPU的操作系统。 Unix是20世纪70年代初出现的一个操作系统&#xff0c;除了作为网络操作系统之外&#xff0c;还可以作为单…...

MPI之MPI_Sendrecv接口以及空进程概念介绍

MPI_Sendrecv函数原型 int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag,void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm comm, MPI_Status *status);其中各个参数的含义如下&…...

Revit SDK:PointCurveCreation 创建点来拟合曲线

前言 这个例子通过留个例子来展示如何通过点来拟合曲线或者曲面。 内容 PointsParabola 生成抛物线的核心逻辑&#xff1a; double yctr 0; XYZ xyz null; ReferencePoint rp null; double power 1.2; while (power < 1.5){double xctr 0;double zctr 0;while (…...

嵌入式Linux开发实操(十五):nand flash接口开发

# 前言 flash memory,分NAND和NOR: 如果说nor flash有个特点就是能执行代码,NOR并行接口具有地址和数据总线,spi flash更是主要用于存储代码,SPI(或QSPI)NOR代码可就地执行(XiP),一般系统要求flash闪存提供相对较高的频率和数据缓存的clocking。而nand flash主要用于…...

vue2 组件库之vetur提示

当我们开发完自定义UI组件库后&#xff0c;在项目中使用时&#xff0c;想要达到以下提示效果&#xff0c;组件提示与属性提示&#xff0c;有什么解决方案呢&#xff1a; 事实上&#xff0c;这是vetur的功能&#xff0c;原文如下&#xff1a; Component Data | Vetur If a pac…...

慕课网 Go工程师 第三周 package和gomodules章节

Go包的引入&#xff1a; 包名前面加匿名&#xff0c;只引入但不使用&#xff0c;如果对应包有init函数&#xff0c;会执行init函数&#xff08;初始化操作&#xff09; 包名前面加. 把这个包的结构体和方法导入当前包&#xff0c;慎用&#xff0c;你不知道当前包和被引入的包用…...

Allegro PCB设计小技巧:如何让Route Keepout区域既能走线又能打过孔(附详细步骤图)

Allegro PCB设计实战&#xff1a;Route Keepout区域的灵活控制技巧 在高速PCB设计中&#xff0c;Route Keepout区域的管理常常让工程师陷入两难境地——元件封装自带的限制区域与实际布线需求产生冲突。特别是处理PCIE等高速信号时&#xff0c;这种矛盾尤为突出。传统做法要么完…...

基于随机森林的低成本传感器机器学习校准实践指南

1. 项目概述&#xff1a;当低成本传感器遇上机器学习校准在物联网和智能感知系统铺天盖地的今天&#xff0c;低成本传感器几乎无处不在。从监测办公室的空气质量&#xff0c;到追踪城市街道的噪音污染&#xff0c;再到农业大棚里的温湿度控制&#xff0c;这些价格亲民的“小眼睛…...

GIS工程应用记录(AI辅助编程)

问题的问题&#xff1a;语境坍缩“从各个角度提出问题&#xff0c;AI做出对应积极答复和修改&#xff0c;结果没有什么变化。”这&#xff0c;就是元问题最核心的症状。你尝试了所有你已知的“高级”协作手段&#xff0c;但就像重拳打在棉花上&#xff0c;AI永远在积极回应&…...

圈复杂度>12=技术债炸弹?DeepSeek静态分析实战:从17.8→3.2的重构路径全披露

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;圈复杂度&#xff1e;12技术债炸弹&#xff1f;DeepSeek静态分析实战&#xff1a;从17.8→3.2的重构路径全披露 当函数圈复杂度&#xff08;Cyclomatic Complexity&#xff09;持续高于12&#xff0c;它不再是…...

通过TaotokenCLI工具一键配置开发环境接入参数

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken CLI工具一键配置开发环境接入参数 对于需要接入多个大模型服务的开发者而言&#xff0c;手动配置每个项目的API密钥、…...

ZYNQ中断避坑指南:PL端信号线如何正确‘连线’到PS端处理函数?

ZYNQ中断系统深度解析&#xff1a;从硬件信号到软件响应的全链路实践 在嵌入式系统开发中&#xff0c;中断处理是实时响应的核心机制。对于ZYNQ这种集成了ARM处理器(PS)和可编程逻辑(PL)的异构计算平台&#xff0c;其中断系统既有传统处理器的特性&#xff0c;又具备FPGA灵活定…...

四大桌面云品牌评测:从安全、体验到性价比

桌面云不再是大型企业的专属&#xff0c;它已成为各行各业实现数据安全、混合办公和IT降本增效的“标准配置”。经过对市场主流方案的全面评估&#xff0c;我们认为&#xff0c;深信服&#xff08;Sangfor&#xff09;aDesk桌面云因其在安全内生化、传输协议自研化、运维管理智…...

【独家首发】DeepSeek官方未公开的集成测试Checklist(含23项生产环境准入阈值与压测基线)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek集成测试方案 DeepSeek模型的集成测试需覆盖推理服务稳定性、多模态输入兼容性、上下文长度边界及API协议一致性四大核心维度。测试环境基于Kubernetes集群部署&#xff0c;采用PrometheusGrafana监控…...

SuperCom串口调试工具终极指南:快速解决嵌入式开发中的通信难题

SuperCom串口调试工具终极指南&#xff1a;快速解决嵌入式开发中的通信难题 【免费下载链接】SuperCom SuperCom 是一款串口调试工具 项目地址: https://gitcode.com/gh_mirrors/su/SuperCom 想象一下这样的场景&#xff1a;你正在调试一个嵌入式设备&#xff0c;需要同…...

Windows多显示器DPI缩放终极解决方案:告别模糊显示,享受清晰视觉体验

Windows多显示器DPI缩放终极解决方案&#xff1a;告别模糊显示&#xff0c;享受清晰视觉体验 【免费下载链接】SetDPI 项目地址: https://gitcode.com/gh_mirrors/se/SetDPI 你是不是曾经遇到过这样的困扰&#xff1f;连接多个显示器时&#xff0c;文字和图标大小不一&…...