EasyExcel知识【Java程序进行读写生成Excel操作】 |
您所在的位置:网站首页 › excel必备知识 › EasyExcel知识【Java程序进行读写生成Excel操作】 |
💂 个人主页: 爱吃豆的土豆
🌈欢迎加入社区,福利多多哦!土豆社区
🤟数据库专栏更新完毕: 数据库知识
🤟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 修改pom文件 org.springframework.boot spring-boot-starter-test org.springframework.boot spring-boot-starter-amqp 1.3.2:测试excel项目项目名:zx-test-excel 修改pom,添加依赖 com.alibaba easyexcel 3.1.1 org.projectlombok lombok 1.4:基本操作 1.4.1:测试JavaBean常用的注解: @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分钟左右. 我选择的是2019.10版本. 最后,这两个勾去掉,点finish即完成安装. 2. Pycharm 的安装 打开 Anaconda Prompt,可以看到出现的是base,说明Anaconda安装是没有问题的. 安装完成后我们建立一个虚拟环境:虚拟环境建立: conda create -n python37_wt python=3.7 结果显示: 输入: y (yes) 然后激活虚拟环境: 接下来安装 Pycharm. 安装之前可以查看新建的虚拟环境有哪些,可以输入 conda env list 进行查看. 可以看到,我建立的虚拟环境中有两个环境. 也可以输入 conda list 查看当前环境中含有哪些包. 进入Pycharm 官网,下载安装 Pycharm. http://https://www.jetbrains.com/pycharm/ 下载至指定目录,双击安装. 选择安装路径(最好与Anaconda在同一个文件夹下)勾选下面四项.直接点 Install 安装. 安装好后双击打开 Pycharm. 然后新建一个 project 选择项目路径。 然后将环境设置环境变量为 下面安装 tensorflow 中的 Python.exe点击 creat 即创建了一个新的文件. 进去后再命令窗口输入: import tensorflow as tf, 然后 print(tf.__version__), 查看输出结果中是否有 ‘2.9.1’ 出现,进而说明安装成功! 3. Tensorflow 安装打开 Anaconda Prompt, 查看 Conda中虚拟环境 conda evn list, 并重新创建一个虚拟环境 conda create -n tensorflow python=3.7 输入y 等待指令完成,然后输入 conda activate tensorflow进行激活.此时前面括号里面出现的 tensorflow 表明我们已经进入了 tensorflow环境. 输入 conda search --full --name tensorflow 查看有哪些可用的tensorflow版本. 在清华大学官方网址上选择自己需要版本:http://https://pypi.tuna.tsinghua.edu.cn/simple, 进行下载. 因为安装的Python是3.7版主, 因此选择的tensorflow 是2.9.1 版本。安装完成后: 输入 python 进入python环境. 然后输入 import tensorflow as tf 再输入 tf.__version__, 出现 “2.9.1” 就表明安装成功. 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 |