美食网站开发目的与意义,效果图怎么收费,网站优化制作公司代理,网站制作方案设计写在前面#xff1a; easyexcel是alibaba开发简单导出未excel的工具。使用的情况还是比较多的。 文章目录 依赖导入写Excel快速入门对象设置ExcelProperty设置列属性ExcelIgnore 忽视列宽、行高格式转换时间格式化数字格式化自定义格式化 合并单元格其他更加个性化需求动态表… 写在前面 easyexcel是alibaba开发简单导出未excel的工具。使用的情况还是比较多的。 文章目录 依赖导入写Excel快速入门对象设置ExcelProperty设置列属性ExcelIgnore 忽视列宽、行高格式转换时间格式化数字格式化自定义格式化 合并单元格其他更加个性化需求动态表头以及其宽高设置 读excel 依赖导入
使用一个工具第一步肯定是导入pom导入下面依赖 dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.2.1/version/dependency写Excel
快速入门
一般在controller进行 需要HttpServletResponse且返回值为null。 GetMapping(_export)public void exportUsers(Query query, HttpServletResponse response) throws IOException {// 导出文件名String fileName 短信记录.xlsx;// 设置响应头response.setContentType(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet);response.setHeader(Content-Disposition, attachment; filename URLEncoder.encode(fileName, UTF-8));// 查询当前用户idLong userId SecurityUtils.getUser().getUserId();// 查询数据ListRecord page service.lambdaQuery().page(query.getPage()).getRecords();// 写入数据EasyExcel.write(response.getOutputStream(), Record.class).sheet(sheet标题).doWrite(page);}对象设置
入门的输出我们会发现所有属性都输出了且是按照属性名作为列名这一般不是我们所需要的。
所以自定义的设置就很需要了。设置是通过在实体类上写注解来设置的。
ExcelProperty设置列属性 value 列名称改属性。 也可以复杂头进行输出如{“主标题”, “标题1”}{“主标题”, “标题2”}这样设置。 那么样式就会是差不多下面这样 index 设置改属性在列的索引默认-1按照java类属性的顺序进行。从0开始。 如果填不满的也不会顺序递增如index 设置了013那么第3列索引2会为空. order 定义列的排序顺序。优先级索引顺序默认排序 converter 自定义转换器这个后面在放大的讲。
ExcelIgnore 忽视
设置后将不在输出该属性。
列宽、行高
可以放到放到类设置通用的列高也可以在属性上设置这个属性的列宽。 -1为自动
ColumnWidth列宽ContentRowHeight 列高HeadRowHeight头高
格式转换
时间格式化
DateTimeFormat(“yyyy年MM月dd日HH时mm分ss秒”)
数字格式化
NumberFormat
style 用于设置字段格式的样式模式。可以通过NumberFormat.Style枚举默认 NumberFormat.Style.DEFAULT style枚举 DEFAULT 注释类型的默认格式通常是“数字”但货币类型可能是“货币NUMBER 当前区域设置的通用数字格式。PERCENT 当前区域设置的百分比格式。CURRENCY 当前区域设置的货币格式。 pattern 用于设置字段格式的自定义模式。例如 #, ###.##。
自定义格式化
使用ExcelProperty的converter 属性属性值为自定义转换器
自定义转换器类需要继承Converter 泛型T为对于的java属性类型 对于写重写下面这一个就能用了 WriteCellData? convertToExcelData(Boolean value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception
如我需要转换一个boolean类型true则输出成功false失败
public class BooleanConverter implements ConverterBoolean {Overridepublic WriteCellData? convertToExcelData(Boolean value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {System.out.println(value);return value ? new WriteCellData(成功) : new WriteCellData(失败);}}合并单元格
属性 这一列 每隔2行 合并单元格 ContentLoopMerge(eachRow 2)类 将第6-7行的2-3列合并成一个单元格 OnceAbsoluteMerge(firstRowIndex 5, lastRowIndex 6, firstColumnIndex 1, lastColumnIndex 2)
其他更加个性化需求
参考官方文档我感觉其他的用到的很少到时候翻一下就可以了
如果有用到会在下面继续更新
动态表头以及其宽高设置
需求表头的列数量不确定且需要设置表头的宽度为20. 我这里是一个每天的计数统计依据用户输入的时间间隔生成列。 这里直接给代码了里面有注释比较容易看。 // 导出文件名String fileName 短信统计.xlsx;// 设置响应头response.setContentType(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet);response.setHeader(Content-Disposition, attachment; filename URLEncoder.encode(fileName, UTF-8));// 查询当前用户idLong userId SecurityUtils.getUserId();// 查询数据LocalDate start query.getStartTime().toLocalDate();LocalDate end query.getEndTime().toLocalDate();ColumnsResultCountRecordBO result null;if (StrUtil.equals(type, 0)) {result service.countRecordByDay(start, end, query.getPageNum(), query.getPageSize());} else if (StrUtil.equals(type, 1)) {result service.countRecordByMonth(start, end, query.getPageNum(), query.getPageSize());} else {throw new IllegalArgumentException(type参数错误);}// 生成表头ListListString header new ArrayList();ListString head0 new ArrayList(1);head0.add(手机号);ListString head1 new ArrayList(1);head1.add(总数);header.add(head0);header.add(head1);result.getColumns().forEach(i - {ListString head new ArrayList(1);head.add(i);header.add(head);});// 生成数据ListListString data result.getData().stream().map(count - {ListString columns new ArrayList();columns.add(count.getPhone());columns.add(count.getCount().toString());columns.addAll(count.getList().stream().map(Object::toString).collect(Collectors.toList()));return columns;}).collect(Collectors.toList());// 写入数据EasyExcel.write(response.getOutputStream())// 设置宽度.registerWriteHandler(new SimpleColumnWidthStyleStrategy(20)).head(header).sheet(短信记录).doWrite(data);读excel