读取时的注解
@ExcelProperty
使用位置:标准作用在成员变量上,吧实体类中属性和excel表中列关联起来。
可选属性:
属性名 | 含义 | 说明 |
index | 对应Excel表中的列数 | 默认-1,建议指定时从0开始 |
value | 对应Excel表中的列头 | |
converter | 成员变量转换器 | 自定义转换器需要实Converter接口 |
使用效果:index属性可以指定当前字段对应excel中的哪一列,可以根据列名value去匹配,也可以不写。
如果不使用@ExcelProperty注解,成员变量从上到下的顺序,对应表格中从左到右的顺序;
**使用建议:**要么全部不写,要么全部用index,要么全部用名字去匹配,尽量不要三个混着用。
@ExcelIgnore
标注在成员变量上,默认所有字段都会和excel去匹配,加了这个注解会忽略该字段
@DateTimeFormat
标注在成员变量上,日期转换,代码中用String类型的成员变量
去接收excel中日期格式的数据
会调用这个注解。里面的value
参照
/**
* 学生出生日期
*/
@ExcelProperty("出生日期")
@ColumnWidth(20)
@DateTimeFormat("yyyy-MM-dd")
private Date birthday;
@NumberFormat
标注在成员变量上,数字转换,代码中用String类型的成员变量
去接收excel数字格式的数据
会调用这个注解。里面的value
参照java.text.DecimalFormat
@ExcelIgnoreUnannotated
标注在类上。
不标注该注解时,默认类中所有成员变量都会参与读写,无论是否在成员变量上加了@ExcelProperty
的注解。
标注该注解后,类中的成员变量如果没有标注 @ExcelProperty
注解将不会参与读写。
5.6 写入时的注解
5.6.1 @ExcelProperty
使用位置:标准作用在成员变量上
可选属性:
属性名 | 含义 | 说明 |
index | 对应Excel表中的列数 | 默认-1,指定时建议从0开始 |
value | 对应Excel表中的列头 | |
converter | 成员变量转换器 | 自定义转换器需要实Converter接口 |
使用效果:
index
指定写到第几列,如果不指定则根据成员变量位置排序;value
指定写入的列头,如果不指定则使用成员变量的名字作为列头;
如果要设置复杂的头,可以为value指定多个值。-
import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.format.DateTimeFormat; 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.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; /** * 学生实体类 * lombok:通过一个插件 + 一个依赖 ,就可以在编译的时候自动帮助生成实体类常用方法 * 注解 @ContentRowHeight():内容的行高 * 注解 @HeadRowHeight:表头的行高 * * @author 狐狸半面添 * @create 2023-02-26 14:56 */ @Data @NoArgsConstructor @AllArgsConstructor public class Student { /** * 学生姓名 */ @ExcelProperty(value = {"学员信息表", "学生姓名"}) @ColumnWidth(20) private String name; /** * 学生出生日期 */ @ExcelProperty(value = {"学员信息表", "出生日期"}) @ColumnWidth(20) @DateTimeFormat("yyyy-MM-dd") private Date birthday; /** * index 从0开始 * 学生性别 */ @ExcelProperty(value = {"学员信息表", "学员性别"}) @ColumnWidth(20) private String gender; /** * id */ @ExcelIgnore private String id; }
5.6.2 其他注解
基本和读取时一致
@ContentRowHeight()
:标注在类上或属性上,指定内容行高@HeadRowHeight()
:标注在类上或属性上,指定列头行高@ColumnWidth()
:标注在类上或属性上,指定列宽@ExcelIgnore
:默认所有字段都会写入excel,这个注解会忽略这个字段DateTimeFormat
:日期转换,将Date
写到excel会调用这个注解。里面的value
参照java.text.SimpleDateFormat
NumberFormat
:数字转换,用Number
写excel会调用这个注解。里面的value
参照java.text.DecimalFormat
ExcelIgnoreUnannotated
:默认不加ExcelProperty
的注解的都会参与读写,加了不会参与
5.7 写入时通用参数
WriteWorkbook
、WriteSheet
都会有的参数,如果为空,默认使用上级。
converter
转换器,默认加载了很多转换器。也可以自定义。writeHandler
写的处理器。可以实现WorkbookWriteHandler
,SheetWriteHandler
,RowWriteHandler
,CellWriteHandler
,在写入excel的不同阶段会调用,对使用者透明不可见。relativeHeadRowIndex
距离多少行后开始。也就是开头空几行needHead
是否导出头head
与clazz
二选一。写入文件的头列表,建议使用class。clazz
与head
二选一。写入文件的头对应的class,也可以使用注解。autoTrim
字符串、表头等数据自动trim
5.8 WriteWorkbook(工作簿对象)参数
excelType
当前excel的类型,默认为xlsx
outputStream
与file
二选一。写入文件的流file
与outputStream
二选一。写入的文件templateInputStream
模板的文件流templateFile
模板文件autoCloseStream
自动关闭流。password
写的时候是否需要使用密码useDefaultStyle
写的时候是否是使用默认头
5.9 WriteSheet(工作表对象)参数
sheetNo
需要写入的编号。默认0sheetName
需要些的Sheet名称,默认同sheetNo