EasyExcel真好用

372 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情

前言

EasyExcel 是阿里开源的,很好用的操作 Excel 的框架,这篇文章介绍 EasyExcel 常用的写操作。

使用

  • 首先,在pom.xml文件中添加 EasyExcel 的 Maven 依赖,我使用的版本是3.1.0。
<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.0</version>
 </dependency>
  • 定义一个简单的实体类 User。ExcelProperty 注解的 value 属性指定了列名,如果没有指定的话列名就是属性名。
@Data
public class User {
    @ExcelProperty(value="编号")
    private int id;
    
    @ExcelProperty(value="姓名")
    private String name;
    
    @ExcelProperty(value = "性别")
    private int flag;
}    
  • 一个通用的获取数据的方法。
private List<User> data() {
    List<User> dataList = new ArrayList<>();
    for(int i = 0;i < 10;i ++) {
        User user = new User();
        user.setId(i);
        user.setName("名称" + i);
        user.setFlag(i % 2);
        dataList.add(user);
    }
    return dataList;
}

最简单的写操作

调用 Excel.write 方法,第一个参数传入 fileName 参数,指定要导出的文件地址,第二个参数指定了 User 类,这样在导出的时候第一行会导出属性名称。

真正写操作是 doWrite() 方法,传入要写入 Excel 的数据列表。

 String fileName = "D:/test.xlsx";
 EasyExcel.write(fileName,User.class).sheet().doWrite(data());
  • excel 示例

image.png

使用模板写操作

  • 模板excel示例

image.png

  String fileName = "D:/test.xlsx";
  String templateFileName = "D:/demo.xlsx";
  EasyExcel.write(fileName,User.class).withTemplate(templateFileName).sheet().doWrite(data());
  • excel示例

image.png

自定义转换器

自定义转换器FlagConverter,实现com.alibaba.excel.converters.Converter接口,并实现其中的接口。

@ExcelProperty注解的converter指定FlagConverter。

@ExcelProperty(value = "性别",converter = FlagConverter.class)
private int flag;
public class FlagConverter implements Converter<Integer> {
    @Override
    public Class supportJavaTypeKey() {
        return Integer.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public WriteCellData convertToExcelData(Integer value, ExcelContentProperty contentProperty,
                                            GlobalConfiguration globalConfiguration) {
        String res = "";
        if(value == 0) {
            res = "男";
        } else {
            res = "女";
        }
        return new WriteCellData(res);
    }
}
  • excel 示例

image.png

样式

使用注解设置头部样式。

//设置头部行高
@HeadRowHeight(20)
//设置头背景颜色
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 10)
//设置头部字体大小
@HeadFontStyle(fontHeightInPoints = 14)
public class User {
}
  • excel示例

image.png

使用注解设置内容样式。

@ExcelProperty("姓名")
//设置背景亮黄色
@ContentStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 5)
private String name;
  • excel 示例

image.png