Java操作Excel大全(持续更新)

文章目录

  • 一、根据Excel模板导出
    • 1、POI
    • 2、Freemarker
  • 二、EasyExcel
    • 1、导包
    • 2、官网

一、根据Excel模板导出

1、POI

需要poi的包。

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>5.2.5</version>
</dependency>

以下代码可以将以下格式的excel,保留原来的表头:
在这里插入图片描述

public static void downLoadTeacherExcel(String outputFilePath, String sourcePath, List<Data> list){try (InputStream templateFileInputStream = ExcelUtil.class.getClassLoader().getResourceAsStream("template/"+sourcePath);OutputStream outputFileOutputStream = new FileOutputStream(outputFilePath);Workbook workbook = new HSSFWorkbook(templateFileInputStream)) {Sheet sheet = workbook.getSheetAt(0);int rowNumber = 2;CellStyle style = workbook.createCellStyle();// 设置上边框style.setBorderTop(BorderStyle.THIN);// 设置下边框style.setBorderBottom(BorderStyle.THIN);// 设置左边框style.setBorderLeft(BorderStyle.THIN);// 设置右边框style.setBorderRight(BorderStyle.THIN);style.setAlignment(HorizontalAlignment.CENTER);if(CollectionUtils.isNotEmpty(list)) {for (Data data : list) {Row row = sheet.createRow(rowNumber++);row.setRowStyle(style);// 生成每一列excel信息row.createCell((short) 0).setCellValue(data.getIdCard()); // 身份证// 姓名row.createCell((short) 1).setCellValue(data.getName());// 性别row.createCell((short) 3).setCellValue(data.getSex() == 1 ? "男" : "女");// 年龄row.createCell((short) 4).setCellValue(data.getAge());// 出生日期row.createCell((short) 5).setCellValue(data.getBirthday());// 民族row.createCell((short) 6).setCellValue(data.getNation());}}workbook.write(outputFileOutputStream);System.out.println("Excel导出成功!");} catch (Exception e) {e.printStackTrace();}}

2、Freemarker

1、需要的包

<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.32</version>
</dependency>

2、准备excel模板:
内容是freemarker的模板格式。
在这里插入图片描述

3、另存为xml表格
注意,图片是无法保存的。

4、调整list
在这里插入图片描述

5、编码

import freemarker.template.Configuration;
import freemarker.template.Template;import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class ExcelUtil {public static void main(String[] args) {try {// 创建FreeMarker配置,参数是包版本号
//            Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
//            cfg.setClassForTemplateLoading(WordUtil.class, "/"); // 会找到项目路径下
//            cfg.setDefaultEncoding("UTF-8");// 加载模板文件 找到resources目录
//            Template template = cfg.getTemplate("template/test.ftl");Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);cfg.setDefaultEncoding("UTF-8");cfg.setDirectoryForTemplateLoading(new File("E:\\")); // 指定模板绝对路径Template template = cfg.getTemplate("test.xml");Map<String, Object> data = new HashMap<>();data.put("name", "张三");List<Map<String, String>> list = new ArrayList<>();Map<String, String> m1 = new HashMap<>();m1.put("title", "标题1");m1.put("info", "内容1");list.add(m1);Map<String, String> m2 = new HashMap<>();m2.put("title", "标题2");m2.put("info", "内容2");list.add(m2);data.put("maps", list);// 这个地方不能使用FileWriter因为需要指定编码类型否则生成的文档会因为有无法识别的编码而无法打开// utf-8是一定要加的!Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:\\output.xlsx"), "utf-8"));template.process(data, out);out.close();} catch (Exception e) {e.printStackTrace();}}
}

6、结果
在这里插入图片描述

二、EasyExcel

1、导包

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.4</version>
</dependency>

注意,EasyExcel包含poi相关的包,如果旧的项目用到了,有可能会有兼容问题。

2、官网

https://easyexcel.opensource.alibaba.com/docs/current/

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

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

相关文章

使用Django JWT实现身份验证

文章目录 安装依赖配置Django设置创建API生成和验证Token总结与展望 在现代Web应用程序中&#xff0c;安全性和身份验证是至关重要的。JSON Web Token&#xff08;JWT&#xff09;是一种流行的身份验证方法&#xff0c;它允许在客户端和服务器之间安全地传输信息。Django是一个…

Spring Boot前后端简单集成MinIo开发

Spring Boot前后端简单集成MinIo开发 源码地址重要配置和代码MinIO配置核心代码 最终效果 源码地址 minioStudy 重要配置和代码 MinIO配置 pom文件引入依赖 <!-- minio --> <dependency><groupId>io.minio</groupId><artifactId>minio</ar…

【C语言之排序】-------六大排序

作者主页&#xff1a;作者主页 数据结构专栏&#xff1a;数据结构 创作时间 &#xff1a;2024年5月18日 前言&#xff1a; 今天我们就给大家带来几种排序的讲解&#xff0c;包括冒泡排序&#xff0c;插入排序&#xff0c;希尔排序&#xff0c;选择排序&#xff0c;堆排序&…

揭秘成都跃享未来教育:安全靠谱,打造教育新未来?

在当今这个信息爆炸的时代&#xff0c;教育行业的变革日新月异&#xff0c;各种教育机构如雨后春笋般涌现。其中&#xff0c;成都跃享未来教育咨询有限公司以其独特的教育理念和创新的教学模式&#xff0c;吸引了众多家长和学生的目光。那么&#xff0c;这家公司到底安不安全&a…

湖南(广告效果测评)源点调研 广告对消费者行为的影响效果

湖南&#xff08;市场调研&#xff09;源点咨询认为&#xff1a;调查在市场中是一个万万不可忽视的环节。 产品在问世之前要认真地调查&#xff0c;广告在投放之前也要认真地调查。由于广告实质是商家和消费者沟通的一个过程&#xff0c;所以在广告投放前&#xff0c;商家就应…

数据新生态:Web3如何重新定义个人数据权利

随着数字化时代的不断深入&#xff0c;个人数据已经成为了现代社会中最宝贵的资源之一。然而&#xff0c;传统互联网时代下&#xff0c;个人数据往往被大型科技公司垄断、滥用&#xff0c;个人数据权利常常受到侵犯。而随着Web3技术的崛起&#xff0c;人们开始期待一种全新的数…

zynq固化问题

zynq固化&#xff0c;sd卡如果没有用gpio那么这个地方不能选 另外ddr型号一定要选对&#xff0c;不同的容量不一样

即时设计工具对决:Figma、Sketch与XD的优劣比较

最近几年&#xff0c;UI 设计工具出现了许多后起之秀&#xff0c;其中有四款更具代表性的UI设计软件&#xff1a;Sketch、Adobe XD、Figma 和 即时设计&#xff0c;这四个设计软件都有自己的优势。如果合作对您的UI设计过程至关重要&#xff0c;那么Figma 和 即时设计 它应该是…

React中常见的面试题

本文是结合实践中和学习技术文章总结出来的笔记(个人使用),如有雷同纯属正常((✿◠‿◠)) 喜欢的话点个赞,谢谢! 1. 约束性组件与非约束性组件 1.1. 非约束性组件 非约束性组件其实就是不能控制状态的组件,比如: <input type"text" defaultValue"123&qu…

腾讯云centos上安装docker

下面的操作是在root用户下操作的,如果非root用户在命令行前加上sudo 1. 系统及内核查看 操作系统&#xff1a;64位的CentOS 7或更新版本。内核版本&#xff1a;最低要求是3.10&#xff0c;推荐使用3.10或更高版本。 #查看内核版本 (base) [klfwjfweaVM-0-6-centos ~]$ uname…

rk3568定时器

前言 本文记录的是用rk3568开发板做定时器实验 1 定时器理论知识 1.1系统节拍 在linux的kernel路径中,输入: make ARCH=arm64 menuconfig // 在内核路径下执行打开配置界面 选中“Timer frequency”,打开以后如图所示: 从图 14.1.1.1 可以看出,可选的系统节拍率为 100…

派派派森03

1.JSON数据 Python数据和Json数据的相互转化 # 导入json模块 import json#准备符合json格式要求的python数据 data [{"name": "老王", "age": 16}, {"name": "张三", "age": 20}]# 通过json.dump(data)方法把pyt…

黑龙江等保测评有哪些内容?

与等保1.0相比&#xff0c;新的等保2.0版本有了很大的变化&#xff0c;评估的内容、评估的标准也有了很大的差异。那么新版的《等保2.0》实施后&#xff0c;我们要测试什么&#xff1f; 等保测评首先是有十个大项&#xff0c;安全物理环境&#xff0c;安全区域边界&#xff0c;…

(echarts)图上数值显示单位

&#xff08;echarts&#xff09;图上数值显示单位 series: [{name: 比例,type: bar,...label: {show: true,position: top,formatter: (params) > params.value % //图上数值显示格式},tooltip: { //鼠标移入图上数值显示格式valueFormatter: function(value) {return val…

实现k8s网络互通

前言 不管是docker还是k8s都会在物理机组件虚拟局域网&#xff0c;只不过是它们实现的目标不同。 docker&#xff1a;针对同一个物理机&#xff08;宿主机&#xff09; k8s&#xff1a;针对的是多台物理机&#xff08;宿主机&#xff09; Docker 虚拟局域网 K8S虚拟局域网 …

借鉴与创新 台湾Apex齿轮减速机PII系列

台湾Apex Dynamics公司以其卓越的减速机技术&#xff0c;长期在全球机械传动领域占据着重要的地位。其中&#xff0c;齿轮减速机PII系列作为齿轮箱Apex基线的新成员&#xff0c;更是凭借其独特的性能和设计受到了广泛的应用。 APEX齿轮减速机PII系列在重量&#xff0c;尺寸&…

CANoe仿真工程Switch控件关联dbc信号出现的问题及解决思路

小白学习CANoe仿真&#xff0c;参考CANoe-第2个仿真工程-XVehicle—1总线数据库设计&#xff08;思路&#xff09;_canoe vehicle-CSDN博客 CANoe-第2个仿真工程-XVehicle1总线数据库设计&#xff08;操作&#xff09;_canoe factor 参数什么意思-CSDN博客CANoe-第2个仿真工程…

【计算机网络】对应用层HTTP协议的重点知识的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

多语言接入淘宝API抓取淘宝数据库数据获取详情页信息评论数据等,打造个性化营销策略

在数字化时代&#xff0c;个性化营销已成为品牌与消费者建立联系的关键。淘宝API作为强大的工具&#xff0c;能够帮助商家深入挖掘消费者需求&#xff0c;实现精准营销。本文将探讨如何通过淘宝API提升营销效果&#xff0c;增强用户体验。 消费者洞察&#xff1a; 淘宝API提供丰…

三.网络编程套接字_TCP

一.序言 在上一章中&#xff0c;我们已经实现了用udp来实现网络编程&#xff0c;这一节我们用tcp来实现网络编程&#xff0c;通过对比两者编写过程的区别&#xff0c;来加深对udp,tcp的理解&#xff01; (两者其实差别不大&#xff01;有了udp的基础&#xff0c;学习起来tcp会…