广西做网站建设的公司,网站建设程序员招聘,济南新闻头条最新事件,wordpress私信功能官方文档#xff1a;关于Easyexcel | Easy Excel
这里进行简单记录#xff0c;方便确定是不是适用此方式#xff1a;
零#xff1a;实体类中注解用法
一#xff1a;读excel /*** 强制读取第三个 这里不建议 index 和 name 同时用#xff0c;要么一个对象只用index关于Easyexcel | Easy Excel
这里进行简单记录方便确定是不是适用此方式
零实体类中注解用法
一读excel /*** 强制读取第三个 这里不建议 index 和 name 同时用要么一个对象只用index要么一个对象只用name去匹配*/ExcelProperty(index 2)/*** 用名字去匹配这里需要注意如果名字重复会导致只有一个字段读取到数据*/ExcelProperty(字符串标题)/*** 我自定义 转换器不管数据库传过来什么 。我给他加上“自定义”*/ExcelProperty(converter CustomStringStringConverter.class)private String string;/*** 这里用string 去接日期才能格式化。我想接收年月日格式*/DateTimeFormat(yyyy年MM月dd日HH时mm分ss秒)private String date;/*** 我想接收百分比的数字*/NumberFormat(#.##%)private String doubleData; Testpublic void simpleRead() {// 写法1JDK8 ,不用额外写一个DemoDataListener// since: 3.0.0-beta1String fileName TestFileUtil.getPath() demo File.separator demo.xlsx;// 这里默认每次会读取100条数据 然后返回过来 直接调用使用数据就行// 具体需要返回多少行可以在PageReadListener的构造函数设置EasyExcel.read(fileName, DemoData.class, new PageReadListenerDemoData(dataList - {for (DemoData demoData : dataList) {log.info(读取到一条数据{}, JSON.toJSONString(demoData));}})).sheet().doRead();// 写法2// 匿名内部类 不用额外写一个DemoDataListenerfileName TestFileUtil.getPath() demo File.separator demo.xlsx;// 这里 需要指定读用哪个class去读然后读取第一个sheet 文件流会自动关闭EasyExcel.read(fileName, DemoData.class, new ReadListenerDemoData() {/*** 单次缓存的数据量*/public static final int BATCH_COUNT 100;/***临时存储*/private ListDemoData cachedDataList ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);Overridepublic void invoke(DemoData data, AnalysisContext context) {cachedDataList.add(data);if (cachedDataList.size() BATCH_COUNT) {saveData();// 存储完成清理 listcachedDataList ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);}}Overridepublic void doAfterAllAnalysed(AnalysisContext context) {saveData();}/*** 加上存储数据库*/private void saveData() {log.info({}条数据开始存储数据库, cachedDataList.size());log.info(存储数据库成功);}}).sheet().doRead();// 有个很重要的点 DemoDataListener 不能被spring管理要每次读取excel都要new,然后里面用到spring可以构造方法传进去// 写法3fileName TestFileUtil.getPath() demo File.separator demo.xlsx;// 这里 需要指定读用哪个class去读然后读取第一个sheet 文件流会自动关闭EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();// 写法4fileName TestFileUtil.getPath() demo File.separator demo.xlsx;// 一个文件一个readertry (ExcelReader excelReader EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).build()) {// 构建一个sheet 这里可以指定名字或者noReadSheet readSheet EasyExcel.readSheet(0).build();// 读取一个sheetexcelReader.read(readSheet);}}
二写excel ExcelProperty(字符串标题)private String string;ExcelProperty(value 字符串标题, index 0)private String string;ExcelProperty({主标题, 字符串标题})private String string;ExcelProperty({主标题, 日期标题})private Date date;/*** 我想所有的 字符串起前面加上自定义三个字*/ExcelProperty(value 字符串标题, converter CustomStringStringConverter.class)private String string;/*** 我想写到excel 用年月日的格式*/DateTimeFormat(yyyy年MM月dd日HH时mm分ss秒)ExcelProperty(日期标题)private Date date;/*** 我想写到excel 用百分比表示*/NumberFormat(#.##%)ExcelProperty(value 数字标题)private Double doubleData;
另外还包含
图片导出、 超链接导出、 自定义背景导出、 合并单元格导出、 设置行高列宽、 动态头、 可变标题等 详见文档 Testpublic void simpleWrite() {// 注意 simpleWrite在数据量不大的情况下可以使用5000以内具体也要看实际情况数据量大参照 重复多次写入// 写法1 JDK8// since: 3.0.0-beta1String fileName TestFileUtil.getPath() simpleWrite System.currentTimeMillis() .xlsx;// 这里 需要指定写用哪个class去写然后写到第一个sheet名字为模板 然后文件流会自动关闭// 如果这里想使用03 则 传入excelType参数即可EasyExcel.write(fileName, DemoData.class).sheet(模板).doWrite(() - {// 分页查询数据return data();});// 写法2fileName TestFileUtil.getPath() simpleWrite System.currentTimeMillis() .xlsx;// 这里 需要指定写用哪个class去写然后写到第一个sheet名字为模板 然后文件流会自动关闭// 如果这里想使用03 则 传入excelType参数即可EasyExcel.write(fileName, DemoData.class).sheet(模板).doWrite(data());// 写法3fileName TestFileUtil.getPath() simpleWrite System.currentTimeMillis() .xlsx;// 这里 需要指定写用哪个class去写try (ExcelWriter excelWriter EasyExcel.write(fileName, DemoData.class).build()) {WriteSheet writeSheet EasyExcel.writerSheet(模板).build();excelWriter.write(data(), writeSheet);}}
三填充excel Getter
Setter
EqualsAndHashCode
public class FillData {private String name;private double number;private Date date;
} Testpublic void simpleFill() {// 模板注意 用{} 来表示你要用的变量 如果本来就有{,} 特殊字符 用\{,\}代替String templateFileName TestFileUtil.getPath() demo File.separator fill File.separator simple.xlsx;// 方案1 根据对象填充String fileName TestFileUtil.getPath() simpleFill System.currentTimeMillis() .xlsx;// 这里 会填充到第一个sheet 然后文件流会自动关闭FillData fillData new FillData();fillData.setName(张三);fillData.setNumber(5.2);EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(fillData);// 方案2 根据Map填充fileName TestFileUtil.getPath() simpleFill System.currentTimeMillis() .xlsx;// 这里 会填充到第一个sheet 然后文件流会自动关闭MapString, Object map MapUtils.newHashMap();map.put(name, 张三);map.put(number, 5.2);EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(map);}