当前位置:   article > 正文

SpringBoot 整合EasyExcel详解(二)-写Excel_easyexcel 默认值

easyexcel 默认值

SpringBoot 整合EasyExcel详解(三)-填充Excel—官方原版

一、注解

使用注解很简单,只要在对应的实体类上面加上注解即可。

ExcelProperty

用于匹配excel和实体类的匹配,参数如下:

名称

默认值

描述

value

用于匹配excel中的头,必须全匹配,如果有多行头,会匹配最后一行头

order

Integer.MAX_VALUE

优先级高于value,会根据order的顺序来匹配实体和excel中数据的顺序

index

-1

优先级高于value和order,会根据index直接指定到excel中具体的哪一列

converter

自动选择

指定当前字段用什么转换器,默认会自动选择。写的情况下只要实现com.alibaba.excel.converters.Converter#convertToExcelData(com.alibaba.excel.converters.WriteConverterContext<T>) 方法即可

ExcelIgnore

默认所有字段都会和excel去匹配,加了这个注解会忽略该字段

ExcelIgnoreUnannotated

默认不管加不加ExcelProperty的注解的所有字段都会参与读写,加了ExcelIgnoreUnannotated注解以后,不加ExcelProperty注解的字段就不会参与

DateTimeFormat

日期转换,用String去接收excel日期格式的数据会调用这个注解,参数如下:

名称

默认值

描述

value

参照java.text.SimpleDateFormat书写即可

use1904windowing

自动选择

excel中时间是存储1900年起的一个双精度浮点数,但是有时候默认开始日期是1904,所以设置这个值改成默认1904年开始

NumberFormat

数字转换,用String去接收excel数字格式的数据会调用这个注解。

名称

默认值

描述

value

参照java.text.DecimalFormat书写即可

roundingMode

RoundingMode.HALF_UP

格式化的时候设置舍入模式

二、参数

概念介绍

  • WriteWorkbook 可以理解成一个excel

  • WriteSheet 理解成一个excel里面的一个表单

  • WriteTable 一个表单里面如果有多个实际用的表格,则可以用WriteTable

通用参数

WriteWorkbook,WriteSheet ,WriteTable都会有的参数,如果为空,默认使用上级。

名称

默认值

描述

converter

默认加载了很多转换器,这里可以加入不支持的字段

writeHandler

写的处理器。可以实现WorkbookWriteHandler,SheetWriteHandler,RowWriteHandler,CellWriteHandler,在写入excel的不同阶段会调用

relativeHeadRowIndex

0

写入到excel和上面空开几行

head

与clazz二选一。读取文件头对应的列表,会根据列表匹配数据,建议使用class

clazz

与head二选一。读取文件的头对应的class,也可以使用注解。如果两个都不指定,则会读取全部数据

autoTrim

true

会对头、读取数据等进行自动trim

use1904windowing

false

excel中时间是存储1900年起的一个双精度浮点数,但是有时候默认开始日期是1904,所以设置这个值改成默认1904年开始

useScientificFormat

false

数字转文本的时候在较大的数值的是否是否采用科学计数法

needHead

true

是否需要写入头到excel

useDefaultStyle

true

是否使用默认的样式

automaticMergeHead

true

自动合并头,头中相同的字段上下左右都会去尝试匹配

excludeColumnIndexes

需要排除对象中的index的数据

excludeColumnFieldNames

需要排除对象中的字段的数据

includeColumnIndexes

只要导出对象中的index的数据

includeColumnFieldNames

只要导出对象中的字段的数据

WriteWorkbook

设置方法如下,找不到参数的看下通用参数里面是否存在。

  1. EasyExcel.write(fileName, DemoData.class)
  2. // 在 write 方法之后, 在 sheet方法之前都是设置WriteWorkbook的参数
  3. .sheet("模板")
  4. .doWrite(() -> {
  5. // 分页查询数据
  6. return data();
  7. });

名称

默认值

描述

excelType

当前excel的类型,支持XLS、XLSX、CSV

outputStream

与file二选一。写入文件的流

file

与outputStream二选一。写入的文件

templateInputStream

模板的文件流

templateFile

模板文件

charset

Charset#defaultCharset

只有csv文件有用,写入文件的时候使用的编码

autoCloseStream

true

自动关闭写入的流。

password

读取文件的密码

inMemory

false

是否在内存处理,默认会生成临时文件以节约内存。内存模式效率会更好,但是容易OOM

writeExcelOnException

false

写入过程中抛出异常了,是否尝试把数据写入到excel

WriteSheet

设置方法如下,找不到参数的看下通用参数里面是否存在。

  1. EasyExcel.write(fileName, DemoData.class)
  2. .sheet("模板")
  3. // 在 sheet 方法之后, 在 doWrite方法之前都是设置WriteSheet的参数
  4. .doWrite(() -> {
  5. // 分页查询数据
  6. return data();
  7. });

名称

默认值

描述

sheetNo

0

需要写入的编码

sheetName

需要些的Sheet名称,默认同sheetNo

WriteTable

设置方法如下,找不到参数的看下通用参数里面是否存在。

  1. EasyExcel.write(fileName, DemoData.class)
  2. .sheet("模板")
  3. .table()
  4. // 在 table 方法之后, 在 doWrite方法之前都是设置WriteTable的参数
  5. .doWrite(() -> {
  6. // 分页查询数据
  7. return data();
  8. });

名称

默认值

描述

tableNo

0

需要写入的编码

三、开发说明

1、最简单的写

excel示例

最简单的写的对象

  1. @Getter
  2. @Setter
  3. @EqualsAndHashCode
  4. public class DemoData {
  5. @ExcelProperty("字符串标题")
  6. private String string;
  7. @ExcelProperty("日期标题")
  8. private Date date;
  9. @ExcelProperty("数字标题")
  10. private Double doubleData;
  11. /**
  12. * 忽略这个字段
  13. */
  14. @ExcelIgnore
  15. private String ignore;
  16. }

代码

  1. /**
  2. * 最简单的写
  3. * <p>
  4. * 1. 创建excel对应的实体对象 参照{@link DemoData}
  5. * <p>
  6. * 2. 直接写即可
  7. */
  8. @Test
  9. public void simpleWrite() {
  10. // 注意 simpleWrite在数据量不大的情况下可以使用(5000以内,具体也要看实际情况),数据量大参照 重复多次写入
  11. // 写法1 JDK8+
  12. // since: 3.0.0-beta1
  13. String fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
  14. // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
  15. // 如果这里想使用03 则 传入excelType参数即可
  16. EasyExcel.write(fileName, DemoData.class)
  17. .sheet("模板")
  18. .doWrite(() -> {
  19. // 分页查询数据
  20. return data();
  21. });
  22. // 写法2
  23. fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
  24. // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
  25. // 如果这里想使用03 则 传入excelType参数即可
  26. EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());
  27. // 写法3
  28. fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
  29. // 这里 需要指定写用哪个class去写
  30. try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build()) {
  31. WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();
  32. excelWriter.write(data(), writeSheet);
  33. }
  34. }

2、根据参数只导出指定列

excel示例

代码

  1. /**
  2. * 根据参数只导出指定列
  3. * <p>
  4. * 1. 创建excel对应的实体对象 参照{@link DemoData}
  5. * <p>
  6. * 2. 根据自己或者排除自己需要的列
  7. * <p>
  8. * 3. 直接写即可
  9. *
  10. * @since 2.1.1
  11. */
  12. @Test
  13. public void excludeOrIncludeWrite() {
  14. String fileName = TestFileUtil.getPath() + "excludeOrIncludeWrite" + System.currentTimeMillis() + ".xlsx";
  15. // 这里需要注意 在使用ExcelProperty注解的使用,如果想不空列则需要加入order字段,而不是index,order会忽略空列,然后继续往后,而index,不会忽略空列,在第几列就是第几列。
  16. // 根据用户传入字段 假设我们要忽略 date
  17. Set<String> excludeColumnFiledNames = new HashSet<String>();
  18. excludeColumnFiledNames.add("date");
  19. // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
  20. EasyExcel.write(fileName, DemoData.class).excludeColumnFiledNames(excludeColumnFiledNames).sheet("模板")
  21. .doWrite(data());
  22. fileName = TestFileUtil.getPath() + "excludeOrIncludeWrite" + System.currentTimeMillis() + ".xlsx";
  23. // 根据用户传入字段 假设我们只要导出 date
  24. Set<String> includeColumnFiledNames = new HashSet<String>();
  25. includeColumnFiledNames.add("date");
  26. // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
  27. EasyExcel.write(fileName, DemoData.class).includeColumnFiledNames(includeColumnFiledNames).sheet("模板")
  28. .doWrite(data());
  29. }

3、指定写入的列

excel示例

对象

  1. @Getter
  2. @Setter
  3. @EqualsAndHashCode
  4. public class IndexData {
  5. @ExcelProperty(value = "字符串标题", index = 0)
  6. private String string;
  7. @ExcelProperty(value = "日期标题", index = 1)
  8. private Date date;
  9. /**
  10. * 这里设置3 会导致第二列空的
  11. */
  12. @ExcelProperty(value = "数字标题", index = 3)
  13. private Double doubleData;
  14. }

代码

  1. /**
  2. * 指定写入的列
  3. * <p>1. 创建excel对应的实体对象 参照{@link IndexData}
  4. * <p>2. 使用{@link ExcelProperty}注解指定写入的列
  5. * <p>3. 直接写即可
  6. */
  7. @Test
  8. public void indexWrite() {
  9. String fileName = TestFileUtil.getPath() + "indexWrite" + System.currentTimeMillis() + ".xlsx";
  10. // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
  11. EasyExcel.write(fileName, IndexData.class).sheet("模板").doWrite(data());
  12. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔尖舞者/article/detail/61125
推荐阅读
相关标签
  

闽ICP备14008679号