从excel导入到excel(史上最全的Excel导入导出)
从excel导入到excel(史上最全的Excel导入导出)
2024-11-08 10:48:03  作者:寂寞式想念  网址:https://m.xinb2b.cn/sport/idp425234.html

喝水不忘挖井人,感谢阿里巴巴项目组提供了easyexcel工具类,github地址:

http://github.com/alibaba/easyexcel

文章目录环境搭建读取excel文件默认读取指定读取默认读取指定读取小于1000行数据大于1000行数据导出excle无模型映射导出模型映射导出单个Sheet导出多个Sheet导出工具类测试类环境搭建easyexcel 依赖(必须)springboot (不是必须)lombok (不是必须)

<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>1.1.2-beat1</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> </dependency>

读取excel文件小于1000行数据默认读取

读取Sheet1的全部数据

String filePath = "/home/chenmingjian/Downloads/学生表.xlsx"; List<Object> objects = excelUtil.readLessThan1000Row(FilePath);

指定读取

如果您正在学习Spring Boot,推荐一个连载多年还在继续更新的免费教程:http://blog.didispace.com/spring-boot-learning-2x/

下面是学生表.xlsx中Sheet1,Sheet2的数据



获取Sheet1表头以下的信息

String filePath = "/home/chenmingjian/Downloads/学生表.xlsx";//第一个1代表sheet1, 第二个1代表从第几行开始读取数据,行号最小值为0Sheet sheet = new Sheet(1, 1);List<Object> objects = ExcelUtil.readLessThan1000Row(filePath,sheet);

获取Sheet2的所有信息

String filePath = "/home/chenmingjian/Downloads/学生表.xlsx"; Sheet sheet = new Sheet(2, 0); List<Object> objects = ExcelUtil.readLessThan1000Row(filePath,sheet);

大于1000行数据默认读取

String filePath = "/home/chenmingjian/Downloads/学生表.xlsx";List<Object> objects = ExcelUtil.readMoreThan1000Row(filePath);

指定读取

String filePath = "/home/chenmingjian/Downloads/学生表.xlsx";Sheet sheet = new Sheet(1, 2);List<Object> objects = ExcelUtil.readMoreThan1000Row(filePath,sheet);

导出excle单个Sheet导出无模型映射导出

String filePath = "/home/chenmingjian/Downloads/测试.xlsx";List<List<Object>> data = new ArrayList<>();data.add(Arrays.asList("111","222","333"));data.add(Arrays.asList("111","222","333"));data.add(Arrays.asList("111","222","333"));List<String> head = Arrays.asList("表头1", "表头2", "表头3");ExcelUtil.writeBySimple(filePath,data,head);

结果


模型映射导出

1、定义好模型对象

package com.springboot.utils.excel.test;import com.alibaba.excel.annotation.ExcelProperty;import com.alibaba.excel.metadata.BaseRowModel;import lombok.Data;import lombok.EqualsAndHashCode;@EqualsAndHashCode(callSuper = true)@Datapublic class TableHeaderExcelProperty extends BaseRowModel { @ExcelProperty(value = "姓名", index = 0) private String name; @ExcelProperty(value = "年龄",index = 1) private int age; @ExcelProperty(value = "学校",index = 2) private String school;}

2、调用方法

String filePath = "/home/chenmingjian/Downloads/测试.xlsx";ArrayList<TableHeaderExcelProperty> data = new ArrayList<>(); for(int i = 0; i < 4; i ){ TableHeaderExcelProperty tableHeaderExcelProperty = new TableHeaderExcelProperty(); tableHeaderExcelProperty.setName("cmj" i); tableHeaderExcelProperty.setAge(22 i); tableHeaderExcelProperty.setSchool("清华大学" i); data.add(tableHeaderExcelProperty); } ExcelUtil.writeWithTemplate(filePath,data);

多个Sheet导出

1、定义好模型对象

package com.springboot.utils.excel.test;import com.alibaba.excel.annotation.ExcelProperty;import com.alibaba.excel.metadata.BaseRowModel;import lombok.Data;import lombok.EqualsAndHashCode;@EqualsAndHashCode(callSuper = true)@Datapublic class TableHeaderExcelProperty extends BaseRowModel { @ExcelProperty(value = "姓名", index = 0) private String name; @ExcelProperty(value = "年龄",index = 1) private int age; @ExcelProperty(value = "学校",index = 2) private String school;}

2、调用方法

ArrayList<ExcelUtil.MultipleSheelPropety> list1 = new ArrayList<>(); for(int j = 1; j < 4; j ){ ArrayList<TableHeaderExcelProperty> list = new ArrayList<>(); for(int i = 0; i < 4; i ){ TableHeaderExcelProperty tableHeaderExcelProperty = new TableHeaderExcelProperty(); tableHeaderExcelProperty.setName("cmj" i); tableHeaderExcelProperty.setAge(22 i); tableHeaderExcelProperty.setSchool("清华大学" i); list.add(tableHeaderExcelProperty); } Sheet sheet = new Sheet(j, 0); sheet.setSheetName("sheet" j); ExcelUtil.MultipleSheelPropety multipleSheelPropety = new ExcelUtil.MultipleSheelPropety(); multipleSheelPropety.setData(list); multipleSheelPropety.setSheet(sheet); list1.add(multipleSheelPropety); } ExcelUtil.writeWithMultipleSheel("/home/chenmingjian/Downloads/aaa.xlsx",list1);

工具类

另外,如果您正在学习Spring Cloud,推荐一个连载多年还在继续更新的免费教程:http://blog.didispace.com/spring-cloud-learning/

package com.springboot.utils.excel;import com.alibaba.excel.EasyExcelFactory;import com.alibaba.excel.ExcelWriter;import com.alibaba.excel.context.AnalysisContext;import com.alibaba.excel.event.AnalysisEventListener;import com.alibaba.excel.metadata.BaseRowModel;import com.alibaba.excel.metadata.Sheet;import lombok.Data;import lombok.Getter;import lombok.Setter;import lombok.extern.slf4j.Slf4j;import org.springframework.util.CollectionUtils;import org.springframework.util.StringUtils;import java.io.*;import java.util.ArrayList;import java.util.Collections;import java.util.List;@Slf4jpublic class ExcelUtil { private static Sheet initSheet; static { initSheet = new Sheet(1, 0); initSheet.setSheetName("sheet"); //设置自适应宽度 initSheet.setAutoWidth(Boolean.TRUE); } public static List<Object> readLessThan1000Row(String filePath){ return readLessThan1000RowBySheet(filePath,null); } public static List<Object> readLessThan1000RowBySheet(String filePath, Sheet sheet){ if(!StringUtils.hasText(filePath)){ return null; } sheet = sheet != null ? sheet : initSheet; InputStream fileStream = null; try { fileStream = new FileInputStream(filePath); return EasyExcelFactory.read(fileStream, sheet); } catch (FileNotFoundException e) { log.info("找不到文件或文件路径错误, 文件:{}", filePath); }finally { try { if(fileStream != null){ fileStream.close(); } } catch (IOException e) { log.info("excel文件读取失败, 失败原因:{}", e); } } return null; } public static List<Object> readMoreThan1000Row(String filePath){ return readMoreThan1000RowBySheet(filePath,null); } public static List<Object> readMoreThan1000RowBySheet(String filePath, Sheet sheet){ if(!StringUtils.hasText(filePath)){ return null; } sheet = sheet != null ? sheet : initSheet; InputStream fileStream = null; try { fileStream = new FileInputStream(filePath); ExcelListener excelListener = new ExcelListener(); EasyExcelFactory.readBySax(fileStream, sheet, excelListener); return excelListener.getDatas(); } catch (FileNotFoundException e) { log.error("找不到文件或文件路径错误, 文件:{}", filePath); }finally { try { if(fileStream != null){ fileStream.close(); } } catch (IOException e) { log.error("excel文件读取失败, 失败原因:{}", e); } } return null; } public static void writeBySimple(String filePath, List<List<Object>> data, List<String> head){ writeSimpleBySheet(filePath,data,head,null); } public static void writeSimpleBySheet(String filePath, List<List<Object>> data, List<String> head, Sheet sheet){ sheet = (sheet != null) ? sheet : initSheet; if(head != null){ List<List<String>> list = new ArrayList<>(); head.forEach(h -> list.add(Collections.singletonList(h))); sheet.setHead(list); } OutputStream outputStream = null; ExcelWriter writer = null; try { outputStream = new FileOutputStream(filePath); writer = EasyExcelFactory.getWriter(outputStream); writer.write1(data,sheet); } catch (FileNotFoundException e) { log.error("找不到文件或文件路径错误, 文件:{}", filePath); }finally { try { if(writer != null){ writer.finish(); } if(outputStream != null){ outputStream.close(); } } catch (IOException e) { log.error("excel文件导出失败, 失败原因:{}", e); } } } public static void writeWithTemplate(String filePath, List<? extends BaseRowModel> data){ writeWithTemplateAndSheet(filePath,data,null); } public static void writeWithTemplateAndSheet(String filePath, List<? extends BaseRowModel> data, Sheet sheet){ if(CollectionUtils.isEmpty(data)){ return; } sheet = (sheet != null) ? sheet : initSheet; sheet.setClazz(data.get(0).getClass()); OutputStream outputStream = null; ExcelWriter writer = null; try { outputStream = new FileOutputStream(filePath); writer = EasyExcelFactory.getWriter(outputStream); writer.write(data,sheet); } catch (FileNotFoundException e) { log.error("找不到文件或文件路径错误, 文件:{}", filePath); }finally { try { if(writer != null){ writer.finish(); } if(outputStream != null){ outputStream.close(); } } catch (IOException e) { log.error("excel文件导出失败, 失败原因:{}", e); } } } public static void writeWithMultipleSheel(String filePath,List<MultipleSheelPropety> multipleSheelPropetys){ if(CollectionUtils.isEmpty(multipleSheelPropetys)){ return; } OutputStream outputStream = null; ExcelWriter writer = null; try { outputStream = new FileOutputStream(filePath); writer = EasyExcelFactory.getWriter(outputStream); for (MultipleSheelPropety multipleSheelPropety : multipleSheelPropetys) { Sheet sheet = multipleSheelPropety.getSheet() != null ? multipleSheelPropety.getSheet() : initSheet; if(!CollectionUtils.isEmpty(multipleSheelPropety.getData())){ sheet.setClazz(multipleSheelPropety.getData().get(0).getClass()); } writer.write(multipleSheelPropety.getData(), sheet); } } catch (FileNotFoundException e) { log.error("找不到文件或文件路径错误, 文件:{}", filePath); }finally { try { if(writer != null){ writer.finish(); } if(outputStream != null){ outputStream.close(); } } catch (IOException e) { log.error("excel文件导出失败, 失败原因:{}", e); } } } @Data public static class MultipleSheelPropety{ private List<? extends BaseRowModel> data; private Sheet sheet; } @Getter @Setter public static class ExcelListener extends AnalysisEventListener { private List<Object> datas = new ArrayList<>(); @Override public void invoke(Object object, AnalysisContext context) { //当前行 // context.getCurrentRowNum() if (object != null) { datas.add(object); } } @Override public void doAfterAllAnalysed(AnalysisContext context) { //解析结束销毁不用的资源 } } }

测试类

package com.springboot.utils.excel;import com.alibaba.excel.annotation.ExcelProperty;import com.alibaba.excel.metadata.BaseRowModel;import com.alibaba.excel.metadata.Sheet;import lombok.Data;import lombok.EqualsAndHashCode;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import java.util.ArrayList;import java.util.Arrays;import java.util.List;@SpringBootTest@RunWith(SpringRunner.class)public class Test { @org.junit.Test public void readLessThan1000Row(){ String filePath = "/home/chenmingjian/Downloads/测试.xlsx"; List<Object> objects = ExcelUtil.readLessThan1000Row(filePath); objects.forEach(System.out::println); } @org.junit.Test public void readLessThan1000RowBySheet(){ String filePath = "/home/chenmingjian/Downloads/测试.xlsx"; Sheet sheet = new Sheet(1, 1); List<Object> objects = ExcelUtil.readLessThan1000RowBySheet(filePath,sheet); objects.forEach(System.out::println); } @org.junit.Test public void readMoreThan1000Row(){ String filePath = "/home/chenmingjian/Downloads/测试.xlsx"; List<Object> objects = ExcelUtil.readMoreThan1000Row(filePath); objects.forEach(System.out::println); } @org.junit.Test public void writeBySimple(){ String filePath = "/home/chenmingjian/Downloads/测试.xlsx"; List<List<Object>> data = new ArrayList<>(); data.add(Arrays.asList("111","222","333")); data.add(Arrays.asList("111","222","333")); data.add(Arrays.asList("111","222","333")); List<String> head = Arrays.asList("表头1", "表头2", "表头3"); ExcelUtil.writeBySimple(filePath,data,head); } @org.junit.Test public void writeWithTemplate(){ String filePath = "/home/chenmingjian/Downloads/测试.xlsx"; ArrayList<TableHeaderExcelProperty> data = new ArrayList<>(); for(int i = 0; i < 4; i ){ TableHeaderExcelProperty tableHeaderExcelProperty = new TableHeaderExcelProperty(); tableHeaderExcelProperty.setName("cmj" i); tableHeaderExcelProperty.setAge(22 i); tableHeaderExcelProperty.setSchool("清华大学" i); data.add(tableHeaderExcelProperty); } ExcelUtil.writeWithTemplate(filePath,data); } @org.junit.Test public void writeWithMultipleSheel(){ ArrayList<ExcelUtil.MultipleSheelPropety> list1 = new ArrayList<>(); for(int j = 1; j < 4; j ){ ArrayList<TableHeaderExcelProperty> list = new ArrayList<>(); for(int i = 0; i < 4; i ){ TableHeaderExcelProperty tableHeaderExcelProperty = new TableHeaderExcelProperty(); tableHeaderExcelProperty.setName("cmj" i); tableHeaderExcelProperty.setAge(22 i); tableHeaderExcelProperty.setSchool("清华大学" i); list.add(tableHeaderExcelProperty); } Sheet sheet = new Sheet(j, 0); sheet.setSheetName("sheet" j); ExcelUtil.MultipleSheelPropety multipleSheelPropety = new ExcelUtil.MultipleSheelPropety(); multipleSheelPropety.setData(list); multipleSheelPropety.setSheet(sheet); list1.add(multipleSheelPropety); } ExcelUtil.writeWithMultipleSheel("/home/chenmingjian/Downloads/aaa.xlsx",list1); } @EqualsAndHashCode(callSuper = true) @Data public static class TableHeaderExcelProperty extends BaseRowModel { @ExcelProperty(value = "姓名", index = 0) private String name; @ExcelProperty(value = "年龄",index = 1) private int age; @ExcelProperty(value = "学校",index = 2) private String school; } }

作者 | 冲奶粉的奶爸

来源 | http://blog.csdn.net/qq_32258777/article/details/89031479

  • 男人精量多是怎么回事(男人滑精怎么办比较好)
  • 2024-11-08男人滑精怎么办比较好生活中有许多男性在非性行为的情况下精液自动流出,这一现象我们就叫滑精那么这一疾病会有哪些危害呢?有什么比较好的改善方法呢?下面为大家介绍男人滑精怎么办比较好,供大家了解滑精的危害出现临床症状如果滑精次。
  • 2023款荣威rx5价格及图片(售价9.33万 15.59万)
  • 2024-11-08售价9.33万 15.59万“闲潭云影日悠悠,物换星移几度秋”,随着时间的流逝,汽车市场的发展越来越快,尤其是在SUV领域,各大车企相继推出新品换代车型来满足消费者的需求,可谓是“八仙过海,各显神通”,不过作为家用汽车,经济实用。
  • 吴君如妖铃铃地主大会(吴君如携焦俊艳等妖孽袭击万达)
  • 2024-11-08吴君如携焦俊艳等妖孽袭击万达自万达开业以来,从来不只买买买彭于晏、刘亦菲、吴京等等……不管是国民老公、天仙女神还是当红小鲜肉万达简直就是明星收割机好么~小编告诉你,本周五,12月29日16:50-17:30又将有几位明星大咖空降。
  • 在家碳烤油烟怎么处理(专业的烧烤设备很重要)
  • 2024-11-08专业的烧烤设备很重要首先室内烧烤应尽量选择在阳台或者厨房,打开抽油烟机和风扇排烟但是在制作时候很容易产生油烟,可以使用韩式烧烤纸上烧烤,在电炉上铺上一层特制的纸张,不会糊锅,也不会产生油烟和明火,非常好用和健康另外,烧烤。
  • 一个人的本质什么意思(人生的本质到底是什么)
  • 2024-11-08人生的本质到底是什么北宋开封兴国寺,有一位执事大和尚,叫德香大和尚,曾对苏轼说:“天下一方城,槛内无净土,天下人食百样米,穿百样衣,做百样事,可说来说去,只有一个‘进’,一个‘退’,退一步是清苦,进一步是辛苦”德香大和尚。
  • 我们都在等唯一契合的灵魂是什么(我们都在等唯一契合的灵魂)
  • 2024-11-08我们都在等唯一契合的灵魂此图来自于网络人生皆过客,我们生命中会遇到过形形色色的人,大多都聚散两匆匆,终归无缘你是否也如我一样在等待一个与自己灵魂唯一相契合的人?曾经看过这么一个故事:“在地铁站,一个肩背背包的帅气的男孩,当疾。
  • 好玩亲子小游戏幼儿园室内(9款室内亲子小游戏)
  • 2024-11-089款室内亲子小游戏游戏是孩子的天性,父母是孩子最好的玩伴想和孩子做游戏,却想不出更多的花样?玩一会孩子就没兴趣了?跟孩子玩游戏,首先要跟孩子同频,要放下所谓的“父母权威”,融入孩子当下的状态,释放你内心的“小孩”,跟孩。
  • 酱油是头发做的吗(酱油是不是头发做的)
  • 2024-11-08酱油是不是头发做的酱油不是头发做的制作酱油的原料是植物性蛋白质和淀粉质,一般用大豆、花生、小麦、玉米、蚕豆制作,通过发酵制取不过,头发酱油也是存在的,是用头发和动物毛发提炼出来的动物性蛋白液制作的,属于违法添加的非食用。
  • 人的面相是什么样的能发财(容易发财的面相)
  • 2024-11-08容易发财的面相拥有富贵喜乐的生活,这样的生活无疑是大多人的向往但是,现实生活中,并不是每个人都能够大富大贵,生活无忧,那么,如何从面相的角度上分析,最易发财的人面相如何呢?接下来就让我们一同探究发财面相的奥秘最易发。
  • 堵漏王处理过什么时候可以做防水(堵漏王可不可以做防水)
  • 2024-11-08堵漏王可不可以做防水堵漏王能不能代替防水材料做防水呢?新型堵漏王我们家里的卫生间用水量大,用水也会多,所以地面防水要做的好,特别是角落、落水口常年潮湿,一旦漏水,一定要及时治理那么,堵漏王能不能代替防水材料做防水呢?一、。
  • 梦见母亲饿死什么意思(梦见母亲饿死的寓意)
  • 2024-11-08梦见母亲饿死的寓意男人梦见母亲饿死:预示着你近期的运势很好,有机会外出游玩,途中将会遇到好的事情青年人梦见母亲饿死:预示着你近期的运势很好,做事情的时候都很顺利,说明自己的办事效率还不错单身者梦见母亲饿死:预示着你近期。
  • 孕妇为啥不能吃芥末(孕期的妈妈吃芥末)
  • 2024-11-08孕期的妈妈吃芥末导读:妈妈们怀孕后,免不了会担心自己的饮食及运动会影响到胎儿,特别对于刺激性的食物很关注那么孕期的妈妈吃芥末,会对胎儿有什么影响吗?孕期的妈妈,需要注意的是,辣椒、生葱、姜、蒜以及芥末、咖喱如辛辣过重。