成都网站建设哪家专业而且比较便宜,网站需求建设关系书,微网站自己怎么做,英文企业网站带后台有数据库EasyExcel的简单使用
前言 Excel读 1.实体类 2.读监听器与测试类 3.输出结果 Excel写 1.实体类 2.写入Excel的测试类 3.输出结果 填充Excel 1.Excel模板 2.测试类 3.输出结果 前言 EasyExcel类是一套基于Java的开源Excel解析工具类#xff0c;相较于传统的框架如Apache poi、…EasyExcel的简单使用
前言 Excel读 1.实体类 2.读监听器与测试类 3.输出结果 Excel写 1.实体类 2.写入Excel的测试类 3.输出结果 填充Excel 1.Excel模板 2.测试类 3.输出结果 前言 EasyExcel类是一套基于Java的开源Excel解析工具类相较于传统的框架如Apache poi、jxl等更加快速、简洁还可以解决大文件内存溢出问题即能让使用者在不用考虑性能、内存的等因素的情况下快速完成Excel的读导入、写导出等功能。
版本支持 2版本支持Java7Java6 3版本支持Java8
这里使用的EasyExcel版本为3.1.1JDK版本为1.8.0_161同时辅助使用lombok和fastjson以简化代码或转化为Jason数据。 Maven依赖配置
dependenciesdependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.1.1/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId //非必要version1.16.10/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactId //非必要version1.2.47/version/dependency
/dependenciesExcel读 样例内容 1.实体类
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
Data
NoArgsConstructor
AllArgsConstructor
public class TextReadObject {ExcelProperty(index 0)private Integer studentId;ExcelProperty(index 1)private String studentName;ExcelProperty(index 2)private String institute;ExcelProperty(index 3)private Integer level_11;ExcelProperty(index 4)private Integer level_12;ExcelProperty(index 5)private Integer level_21;ExcelProperty(index 6)private Integer level_22;
}其中注解ExcelProperty可包含两个参数index和value在简单表头即表头只占用一行中以下两条注解基本等价
ExcelProperty(index 0)ExcelProperty(value “学号”)而在复杂表头即本例中需要使用index表示。 另外需要注意的是加入表头名字出现重复会导致只有一个字段读取到数据此外在读取操作时不建议index和value同时使用。综上所述在已知excel表头内容的情况下使用参数index。
2.读监听器与测试类 四个监听器这里使用前两个 AnalysisEventListener T 所有已实现的接口Listener、ReadListener 直接已知子类SyncReadListener
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.Map;
import java.util.List;
import lombok.AllArgsConstructor;AllArgsConstructor
public class DemoDataListener extends AnalysisEventListenerTextReadObject {private ListTextReadObject dataList;//读取表头的内容Overridepublic void invokeHeadMap(MapInteger, String headMap, AnalysisContext context) {System.out.println(表头-headMap);}//一行一行读取excel中的内容Overridepublic void invoke(TextReadObject data, AnalysisContext context) {dataList.add(data);}//读取完成之后执行的方法Overridepublic void doAfterAllAnalysed(AnalysisContext context) {}
}读取Excel的测试类
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;public class ExcelImport {public static void simpleRead() {String fileName F:\\rdtext.xls;ListTextReadObject dataList new ArrayList();//每次会读取100条数据然后返回过来直接调用使用数据就行EasyExcel.read(fileName, TextReadObject.class, new DemoDataListener(dataList)).sheet(0)//读取第一个sheet.headRowNumber(3) //跳过前三行表头内容假如是简单表头则这句可省略.doRead();//若需要实现读取全部sheet可以使用.doReadAll()代替.sheet(0).doRead()for (TextReadObject dl : dataList) {System.out.println(JSON.toJSONString(dl));}}public static void main(String[] args) { simpleRead(); }
}SyncReadListener 所有已实现的接口Listener、ReadListener 直接已知父类AnalysisEventListener T
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.SyncReadListener;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;public class ExcelImportSync {public static void simpleRead() {String fileName F:\\text.xls;final List dataList new ArrayList();EasyExcel.read(fileName, TextReadObject.class, new SyncReadListener() {Overridepublic void invokeHeadMap(MapInteger, String headMap, AnalysisContext context) {System.out.println(表头-headMap);}Overridepublic void invoke(Object object, AnalysisContext context) {dataList.add(object);}}).sheet(0).headRowNumber(3).doRead();for (Object o : dataList) {TextReadObject TOB (TextReadObject) o;System.out.println(JSON.toJSONString(TOB));}}public static void main(String[] args) { simpleRead(); }
}相较于AnalysisEventListener T SyncReadListener更加适合对多种实体类实施相同操作的情况在定义监听器时没有指定具体的实体类。
3.输出结果 二者输出结果一样 Excel写 1.实体类
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
Data
NoArgsConstructor
AllArgsConstructor
ColumnWidth(15) //列宽,最大值为255
HeadRowHeight(16) //表头行高
ContentRowHeight(16) //数据行高
public class TextWriteObject {//复杂表头自动合并相同的内容ExcelProperty(index 0, value {学号, 学号, 学号})private Integer studentId;ExcelProperty(index 1, value {姓名, 姓名, 姓名})private String studentName;ColumnWidth(25)//单独设置列宽ExcelProperty(index 2, value {学院, 学院, 学院})private String institute;//复杂表头嵌套ExcelProperty(index 3, value {成绩, 第一学年, 第一学期})private Integer level_11;ExcelProperty(index 4, value {成绩, 第一学年, 第二学期})private Integer level_12;ExcelProperty(index 5, value {成绩, 第二学年, 第一学期})private Integer level_21;ExcelProperty(index 6, value {成绩, 第二学年, 第二学期})private Integer level_22;
}此时在注解ExcelProperty中可以同时使用参数index和value用于同时指定位置和内容。
其他未使用注解 ContentStyle用于设置内容格式 ContentFontStyle用于设置单元格内容字体格式 ExcelIgnore不将该字段转换成Excel
ExcelIgnoreUnannotated没有注解的字段都不转换
2.写入Excel的测试类
import java.util.ArrayList;
import java.util.List;public class ExcelExport {public static void simpleWrite(){String fileName F:\\wttext.xls;ListTextWriteObject dataList new ArrayList();dataList.add(new TextWriteObject(2022101, 张三,生命科学院, 653, 602, 683, 707));dataList.add(new TextWriteObject(2022102, 李四,生命科学院, 568, 596, 611, 632));dataList.add(new TextWriteObject(2022103, 王五,生命科学院, 606, 673, 624, 653));dataList.add(new TextWriteObject(2022201, 赵六,语言文学院, 710, 722, 686, 703));EasyExcel.write(fileName, TextWriteObject.class).sheet(0).doWrite(dataList);}public static void main(String[] args) { simpleWrite(); }
}3.输出结果 原文链接https://blog.csdn.net/hermit_f/article/details/126850664 https://blog.csdn.net/hermit_f/article/details/126850664?spm1001.2014.3001.5506