EasyExcel知识【Java程序进行读写生成Excel操作】

您所在的位置:网站首页 excel必备知识 EasyExcel知识【Java程序进行读写生成Excel操作】

EasyExcel知识【Java程序进行读写生成Excel操作】

2022-12-31 04:43| 来源: 网络整理| 查看: 265

💂 个人主页: 爱吃豆的土豆 🌈欢迎加入社区,福利多多哦!土豆社区 🤟数据库专栏更新完毕: 数据库知识 🤟JDBC专栏更新完毕: JDBC知识 🤟Mybatis专栏更新完毕: Mybatis知识 💬 如果文章对你有帮助、 *欢迎关注、点赞、收藏(一键三连)和订阅专栏哦

目录

1,Easy Excel入门

1.1:Easy Excel概述

1.2:Easy Excel特点

1.3:环境搭建

1.3.1:测试父项目

1.3.2:测试excel项目

1.4:基本操作

1.4.1:测试JavaBean

1.4.2:测试文件路径

1.4.3:写入操作

1.4.4:读出操作

1.5:复杂操作

1.5.1:复合表头

1.5.2:写操作:多表

1.5.3:读操作:多表

1.5.4:写操作:多对象

1,Easy Excel入门 1.1:Easy Excel概述

EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel工具。

官网:EasyExcel官方文档 – 基于Java的Excel处理工具 | Easy Excel

github地址:GitHub – alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具

1.2:Easy Excel特点

Java解析、生成Excel比较有名的框架有Apache poi、jxl,但他们都存在一个严重的问题就是非常的耗内存。

EasyExcel 重写了poi,使一个3M的excel只需要几M内存,并且再大的excel不会出现内存溢出。

64M内存1分钟内读取75M(46W行25列)的Excel。

1.3:环境搭建 1.3.1:测试父项目

项目名:zx-test-parent

EasyExcel知识【Java程序进行读写生成Excel操作】 修改pom文件 org.springframework.boot spring-boot-starter-test org.springframework.boot spring-boot-starter-amqp 1.3.2:测试excel项目

项目名:zx-test-excel

EasyExcel知识【Java程序进行读写生成Excel操作】

修改pom,添加依赖

com.alibaba easyexcel 3.1.1 org.projectlombok lombok

EasyExcel知识【Java程序进行读写生成Excel操作】 1.4:基本操作

EasyExcel知识【Java程序进行读写生成Excel操作】 1.4.1:测试JavaBean

常用的注解:

EasyExcel知识【Java程序进行读写生成Excel操作】 @Data @AllArgsConstructor @NoArgsConstructor @ColumnWidth(30) @HeadRowHeight(30) public class Student1 { @ExcelProperty("编号") private String id; @ExcelProperty("姓名") @ContentFontStyle(fontName = "楷体",italic = BooleanEnum.TRUE,color = Font.ITALIC) private String name; @ExcelProperty({"基本信息","年龄"}) private Integer age; @ExcelProperty({"基本信息","电话"}) private String phone; @ExcelProperty({"可选信息","邮件"}) private String Email; @ExcelProperty({"可选信息","生日"}) @DateTimeFormat("yyyy-MM-dd HH:mm") private Date birthday; } 1.4.2:测试文件路径 public String path(){ return this.getClass().getResource("/").getPath(); } 1.4.3:写入操作 excel 属于 office组件一个软件 存在若干版本,大体上划分2种情况,2007前的,2007年后的 2003版:扩展名 xls,内容比较少,最大单元格 IV65536 ,256列(IV) 2007版:扩展名 xlsx,内容较多,最大单元格 XFD1048576,16384列(XFD) // 模拟数据 public List getDate(){ //模拟十条数据 ArrayList student1s = new ArrayList(); for (int i = 0; i < 10; i++) { Student1 student1 = new Student1(i+"","土豆"+i,i,"115"+i,"626"+i,new Date()); student1s.add(student1); } return student1s; } //创建测试写程序 @Test public void testWrite(){ //写入位置:%classpath%/ //文件名称:student-demo.xls //表名:土豆 //1,文件位置 String file = path()+"student_demo1.xls"; //2 写操作 EasyExcel.write(file, Student1.class).sheet("土豆").doWrite(getDate()); } 1.4.4:读出操作

处理类:

处理类需要实现 AnalysisEventListener 接口 package com.czxy.read; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.czxy.excel.Student1; public class StudentDataListener1 extends AnalysisEventListener { @Override public void invoke(Student1 student1, AnalysisContext analysisContext) { System.out.println(student1); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } } //测试读出excel程序 @Test public void testRead(){ String file = path()+"student_demo1.xls"; //读操作 EasyExcel.read(file, Student1.class, new StudentDataListener1()).sheet("土豆").doRead(); } 1.5:复杂操作 1.5.1:复合表头 package com.czxy.excel; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.format.DateTimeFormat; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentFontStyle; import com.alibaba.excel.annotation.write.style.HeadRowHeight; import com.alibaba.excel.enums.BooleanEnum; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.awt.*; import java.util.Date; @Data @AllArgsConstructor @NoArgsConstructor @ColumnWidth(30) @HeadRowHeight(30) public class Student2 { @ExcelProperty("编号") private String id; @ExcelProperty("姓名") @ContentFontStyle(fontName = "楷体",italic = BooleanEnum.TRUE,color = Font.ITALIC) private String name; @ExcelProperty({"基本信息","年龄"}) private Integer age; @ExcelProperty({"基本信息","电话"}) private String phone; @ExcelProperty({"可选信息","邮件"}) private String Email; @ExcelProperty({"可选信息","生日"}) @DateTimeFormat("yyyy-MM-dd HH:mm") private Date birthday; } 1.5.2:写操作:多表 //得到根目录路径 public String path(){ return this.getClass().getResource("/").getPath(); } // 模拟数据 public List getDate(){ //模拟十条数据 ArrayList student1s = new ArrayList(); for (int i = 0; i < 10; i++) { Student1 student1 = new Student1(i+"","土豆"+i,i,"115"+i,"626"+i,new Date()); student1s.add(student1); } return student1s; } //创建测试书写多表 @Test public void testWrite(){ //写入位置:%classpath%/ //文件名称:student-demo.xls //表名:土豆 //1,文件位置 String file = path()+"student_demo2.xls"; //2 写操作 ExcelWriter excelWriter = EasyExcel.write(file, Student2.class).build(); //写入多个sheet WriteSheet writeSheet1 = EasyExcel.writerSheet("爱吃豆的").build(); excelWriter.write(getDate(),writeSheet1); //写入第二个sheet WriteSheet writeSheet2 = EasyExcel.writerSheet("土豆").build(); excelWriter.write(getDate(),writeSheet2); excelWriter.finish(); } 1.5.3:读操作:多表

具有缓存处理类

package com.czxy.read; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.czxy.excel.Student2; import java.util.ArrayList; import java.util.List; public class StudentDataListener2 extends AnalysisEventListener { //创建一个集合用于保存学生 private List student2List = new ArrayList(); //创建一个变量用于判断 private Integer size = 4; @Override public void invoke(Student2 student2, AnalysisContext analysisContext) { student2List.add(student2); if (student2List.size()>size){ print(); } } //重新创建一个方法 public void print(){ student2List.forEach(System.out::println); System.out.println("============"); //打印完成之后进行清空集合 student2List.clear(); } //该方法 @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { System.out.println("打印完成"); //如果集合中还有数据进行打印 if (!student2List.isEmpty()){ print(); } student2List.clear(); } }

读操作

@Test public void testRead(){ String file = path()+"student_demo2.xls"; //读操作 ExcelReader excelReader = EasyExcel.read(file, Student2.class, new StudentDataListener2()).build(); ReadSheet readSheet1 = EasyExcel.readSheet("爱吃豆的").build(); excelReader.read(readSheet1); ReadSheet readSheet2 = EasyExcel.readSheet("土豆").build(); excelReader.read(readSheet2); excelReader.finish(); } 1.5.4:写操作:多对象

Student

@Data @NoArgsConstructor @AllArgsConstructor public class Student { @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private Integer age; }

Book

@Data @NoArgsConstructor @AllArgsConstructor @HeadRowHeight(50) @HeadFontStyle(fontName = "黑体",italic = BooleanEnum.TRUE, color = Font.COLOR_RED, underline = 2) public class Book { @ExcelProperty("编号") private String id; @ExcelProperty({"作者信息","姓名"}) private String authorName; @ExcelProperty({"作者信息","年龄"}) private Integer authorAge; @ExcelProperty({"书籍基本信息","标题"}) private String title; @ContentFontStyle(fontName = "楷书",italic = BooleanEnum.TRUE, color = Font.COLOR_RED, underline = -1) @ExcelProperty({"书籍基本信息","价格"}) private Double price; @ExcelProperty({"书籍基本信息","出版日期"}) @DateTimeFormat("yyyy年MM月dd日") private Date publishDate; }

实现

public class TestManyObject { // 获得当前项目的运行时的根目录 public String getPath() { return this.getClass().getResource("/").getPath(); } // 模拟数据 public List getStudentData() { List list = new ArrayList(); for (int i = 0; i < 20; i++) { list.add(new Student("张三" + i, 18 + i)); } return list; } public List getBookData() { List list = new ArrayList(); for (int i = 0; i < 20; i++) { list.add(new Book(i+"" , "张三" + i , 18 +i, "坏蛋是怎么"+i, 998d+i, new Date())); } return list; } // 遍历map即可 private Map, List> getData() { Map, List> map = new HashMap(); map.put(Student.class, getStudentData()); map.put(Book.class, getBookData()); return map; } @Test public void testManyObject() { String file = getPath() + "many_object.xlsx"; //1 开始写 ExcelWriter excelWriter = EasyExcel.write(file).build(); //2 依次写每一个对象 for(Map.Entry, List> entry : getData().entrySet()) { Class clazz = entry.getKey(); //类型 List data = entry.getValue(); //数据 WriteSheet writeSheet = EasyExcel.writerSheet(clazz.getSimpleName()).head(clazz).build(); excelWriter.write(data, writeSheet); } //3 写完成 excelWriter.finish(); } }

Original: https://blog.csdn.net/m0_64550837/article/details/126655735Author: 爱吃豆的土豆Title: EasyExcel知识【Java程序进行读写生成Excel操作】

相关阅读 Title: 手把手教你安装 Anaconda + Tensor flow+Pycharm

手把手教你安装 Anaconda + Tensor flow+Pycharm

这篇博文主要讲一下自己安装Anaconda + Tensor flow + Pycharm 的一个过程。

1. ANACONDA 的安装

Anaconda的下载地址不建议取官网下载安装,因为在实际的安装过程中发现:在官网下载的一般是最新版本,由于兼容性问题,在实际使用中显得并不是很好用,且会有各种报错. 例如,安装官网的Anaconda后tensorflow找不到与之相匹配的版本.

推荐使用下面的清华源镜像:网址链接-清华源下载地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/然后,选自己需要的版本进行下载。我们建议不要安装太老的版本,也不要安装太新的版本. 在Windows操作系统下,安装比较简单,下载好后,一路 next 即可.这个时间会比较久一些,大概需要10分钟左右.

**手把手教你安装 Anaconda + Tensor flow+Pycharm**

我选择的是2019.10版本.

**手把手教你安装 Anaconda + Tensor flow+Pycharm**

最后,这两个勾去掉,点finish即完成安装.

2. Pycharm 的安装 打开 Anaconda Prompt,

**手把手教你安装 Anaconda + Tensor flow+Pycharm**

可以看到出现的是base,说明Anaconda安装是没有问题的.

安装完成后我们建立一个虚拟环境:

虚拟环境建立: conda create -n python37_wt python=3.7

结果显示:

**手把手教你安装 Anaconda + Tensor flow+Pycharm**

输入: y (yes)

然后激活虚拟环境:

**手把手教你安装 Anaconda + Tensor flow+Pycharm** 接下来安装 Pycharm. 安装之前可以查看新建的虚拟环境有哪些,可以输入 conda env list 进行查看. 可以看到,我建立的虚拟环境中有两个环境.

**手把手教你安装 Anaconda + Tensor flow+Pycharm** 也可以输入 conda list 查看当前环境中含有哪些包.

**手把手教你安装 Anaconda + Tensor flow+Pycharm** 进入Pycharm 官网,下载安装 Pycharm. http://https://www.jetbrains.com/pycharm/

**手把手教你安装 Anaconda + Tensor flow+Pycharm** 下载至指定目录,双击安装.

**手把手教你安装 Anaconda + Tensor flow+Pycharm** 选择安装路径(最好与Anaconda在同一个文件夹下)勾选下面四项.

**手把手教你安装 Anaconda + Tensor flow+Pycharm**

直接点 Install 安装.

安装好后双击打开 Pycharm. 然后新建一个 project 选择项目路径。

**手把手教你安装 Anaconda + Tensor flow+Pycharm** 然后将环境设置环境变量为 下面安装 tensorflow 中的 Python.exe

**手把手教你安装 Anaconda + Tensor flow+Pycharm**

点击 creat 即创建了一个新的文件.

进去后再命令窗口输入: import tensorflow as tf, 然后 print(tf.__version__), 查看输出结果中是否有 ‘2.9.1’ 出现,进而说明安装成功!

**手把手教你安装 Anaconda + Tensor flow+Pycharm** 3. Tensorflow 安装

打开 Anaconda Prompt,

查看 Conda中虚拟环境 conda evn list, 并重新创建一个虚拟环境 conda create -n tensorflow python=3.7

**手把手教你安装 Anaconda + Tensor flow+Pycharm** 输入y 等待指令完成,然后输入 conda activate tensorflow进行激活.

**手把手教你安装 Anaconda + Tensor flow+Pycharm**

此时前面括号里面出现的 tensorflow 表明我们已经进入了 tensorflow环境.

输入 conda search --full --name tensorflow 查看有哪些可用的tensorflow版本.

**手把手教你安装 Anaconda + Tensor flow+Pycharm** 在清华大学官方网址上选择自己需要版本:http://https://pypi.tuna.tsinghua.edu.cn/simple, 进行下载. 因为安装的Python是3.7版主, 因此选择的tensorflow 是2.9.1 版本。

**手把手教你安装 Anaconda + Tensor flow+Pycharm**

安装完成后: 输入 python 进入python环境.

然后输入 import tensorflow as tf 再输入 tf.__version__, 出现 “2.9.1” 就表明安装成功.

**手把手教你安装 Anaconda + Tensor flow+Pycharm**

Guys, Happy coding!!!

Original: https://www.cnblogs.com/Fugui-Ma/p/16665801.htmlAuthor: Fugui-MaTitle: 手把手教你安装 Anaconda + Tensor flow+Pycharm

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/276341/

转载文章受原作者版权保护。转载请注明原作者出处!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3