Octopus
如何导入excel
如何导出excel
OctopusOctopus 是一个简单的java excel导入导出工具.
如何导入excel下面是一个excel文件中sheet的数据,有四个学生信息.
studentId | name | sex | inTime | score |
---|---|---|---|---|
20134123 | John | M | 2013-9-1 | 89 |
20124524 | Joyce | F | 20123-8-31 | 79 |
20156243 | P | 2015-5-15 | 94 | |
20116522 | Nemo | F | 2011-2-26 |
一个学生类,用来保存从excel中读取的学生信息.
//lombok annotations @Getter @Setter @NoArgsConstructor @ToString public class Student { @ModelLineNumber private int lineNum; @ModelProperty(value = "id",blankable = false) private String studentId; @ModelProperty(value = "name",defaultValue = "anonymous") private String name; @ModelProperty(value = "sex",wrongMsg = "sex must be M or F",pattern = "^M|F$") private String sex; @ModelProperty(value = "admission",wrongMsg = "admission must be a date") private LocalDate inTime; @ModelProperty(value = "score",wrongMsg = "score must be numeric",defaultValue = "100") private Double score; }
用代码读取excel,并输出学生信息:
InputStream is = getClass().getResourceAsStream("/test.xlsx"); Workbook workbook = WorkbookFactory.create(is); Sheet sheet = workbook.getSheetAt(0); //read students with ReusableSheetReader SheetReader> students = new ReusableSheetReader<>(sheet,1,0,Student.class); //print students information for (ModelEntity student:students) { System.out.println(student.toString()); }
输出的学生信息
SimpleModelEntity(entity=Student(lineNum=2, studentId=20134123, name=John, sex=M, inTime=2013-09-01, score=89.0, gradeAndClazz=null), exceptions=[]) SimpleModelEntity(entity=Student(lineNum=3, studentId=20124524, name=Joyce, sex=F, inTime=null, score=79.0, gradeAndClazz=null), exceptions=[cn.chenhuanming.octopus.exception.DataFormatException: in cell (3,4) ,20123-8-31 can not be formatted to class java.time.LocalDate]) SimpleModelEntity(entity=Student(lineNum=4, studentId=20156243, name=anonymous, sex=null, inTime=2015-05-15, score=94.0, gradeAndClazz=null), exceptions=[cn.chenhuanming.octopus.exception.PatternNotMatchException: P and ^M|F$ don"t match!]) SimpleModelEntity(entity=Student(lineNum=5, studentId=20116522, name=Nemo, sex=F, inTime=2011-02-26, score=100.0, gradeAndClazz=null), exceptions=[])
通过ModelEntity
完整的测试用例:src/test/cn/chenhuanming/octopus/core/SheetReaderTest
如何导出excel为了说明导出的特性,我们给Student类增加一个属性GradeAndClazz用来表示年级和班级.下面是最终的Student类,可以用来导入导出.
@Getter @Setter @NoArgsConstructor @ToString public class Student { @ModelLineNumber private int lineNum; @ModelProperty(value = "id",blankable = false) private String studentId; @ModelProperty(value = "name",defaultValue = "anonymous") private String name; @ModelProperty(value = "sex",wrongMsg = "sex must be M or F",pattern = "^M|F$") private String sex; //jackson annotation to format output @JsonFormat(pattern = "yyyy-MM-dd") @ModelProperty(value = "admission",wrongMsg = "admission must be a date") private LocalDate inTime; @ModelProperty(value = "score",wrongMsg = "score must be numeric",defaultValue = "100") private Double score; @ModelIgnore private GradeAndClazz gradeAndClazz; public Student(String studentId, String name, String sex, LocalDate inTime, Double score,GradeAndClazz gradeAndClazz) { this.studentId = studentId; this.name = name; this.sex = sex; this.inTime = inTime; this.score = score; this.gradeAndClazz = gradeAndClazz; } }
GradeAndClazz类,只有年级和班级两个信息.
@Getter @Setter @AllArgsConstructor public class GradeAndClazz{ private String grade; private String clazz; }
需要一个xml来配置导出的属性和属性描述作为表头
用代码导出学生信息
//prepare workbook and stuednts objects Workbook workbook = new XSSFWorkbook(); String rootPath = this.getClass().getClassLoader().getResource("").getPath(); FileOutputStream os = new FileOutputStream(rootPath+"/export.xlsx"); GradeAndClazz gradeAndClazz = new GradeAndClazz("2014","R6"); Student student1 = new Student("201223","John","M", LocalDate.now(),98.00,gradeAndClazz); Student student2 = new Student("204354","Tony","M", LocalDate.now(),87.00,gradeAndClazz); Student student3 = new Student("202432","Joyce","F", LocalDate.now(),90.00,gradeAndClazz); //write excel with OneSheetExcelWriter ExcelWriterstudentExcelWriter = new OneSheetExcelWriter<>(getClass().getClassLoader().getResourceAsStream("studentExport.xml")); studentExcelWriter.write(workbook,Arrays.asList(student1,student2,student3)); workbook.write(os);
导出结果
| class info | id name M admission score |---------|----------| | grade | class | ---------------------------------------------------------------| 201223 John M 2017-07-06 98.0 | 2014 | R6 | 204354 Tony M 2017-07-06 87.0 | 2014 | R6 | 202432 Joyce F 2017-07-06 90.0 | 2014 | R6 |
可以看到,对于gradeAndClazz属性,会用一个合并单元格来表示.admission因为被@JsonFormat标记,因此会格式化输出日期。事实上Octopus会调用jackson来格式化json后再写入excel.
详细例子在 src/test/cn/chenhuanming/octopus/core/OneSheetExcelWriterTest
github项目地址文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/67505.html
摘要:我想能不能像配置文件一样可配置的导入导出,那样使用起来就方便许多。配置和使用下面是员工信息模型。支持多种映射,使用英文逗号进行分割。导入时它会以分割前面的作为导入时使用的值,后面的作为导出时使用的值后面值进行逆推导出时同理。 1.前言 在工作时,遇到过这样的需求,需要灵活的对工单进行导入或导出,以前自己也做过,但使用不灵活繁琐。我想能不能像配置文件一样可配置的导入导出,那样使用起来就方...
摘要:的使用及导出报表首先,了解是什么一基本概念是软件基金会的开放源码函式库,提供给程序对格式档案读和写的功能。 POI的使用及导出excel报表 首先,了解poi是什么? 一、基本概念 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 二、基本结构 HSSF - 提供读写...
摘要:阅读原文如何高效导出百万级数据在一个具有统计功能的系统中,导出功能几乎是一定的,如何导出导出的数据有多少如何高效的导出简介什么是就不用介绍了,这里主要说明不同版本下每个下的行列限制。 阅读原文:POI如何高效导出百万级Excel数据? 在一个具有统计功能的系统中,导出excel功能几乎是一定的,如何导出excel?导出的数据有多少?如何高效的导出? Excel简介什么是excel就不用...
摘要:拿到值后,创建当前单元格,把数据填充进去。首先判断当前单元格的数据是不是数字型的,如果是数字型的,在判断是不是日期类型的,如果是日期类型,再转为日期类型。 导读 最近,公司在做导入导出的项目,首先想到的是poi的导入和导出。如果每次导入和导出都要重写的话,那么,实在是浪费时间和精力。于是,封装了原生的poi的导入和导出。在封装的时候,就会出现一系列的问题。 在进行导入和导出的时候,我们...
阅读 716·2021-10-09 09:44
阅读 1947·2021-09-22 15:54
阅读 4990·2021-09-22 10:55
阅读 1399·2019-08-29 18:41
阅读 738·2019-08-29 11:24
阅读 2069·2019-08-28 18:20
阅读 997·2019-08-26 11:51
阅读 3019·2019-08-26 11:00