easyExcel导入导出、样式填充

其他链接:
easyexcel+springboot导入导出
https://blog.csdn.net/qq_33745371/article/details/110822811

easyExcel官网

https://www.yuque.com/easyexcel

代码下载地址

百度网盘

https://pan.baidu.com/s/16me3vEOeJnbDD2kD3mj-XA 提取码:udam

天翼云盘

https://cloud.189.cn/t/F7naaiviymym

导入功能

单实体导入

1.创建实体类(这里我使用了lombok,直接添加了@Data)

@Data
public class Student {
    /**
     * 姓名
     */
    private String name;
    /**
     * 性别
     */
    private String gender;
    /**
     *年龄
     */
    private Integer age;
    /**
     *特点
     */
    private String specialty;
    /**
     * id
     */
    private Long id;
}

2.创建监听类

public class StudentListener extends AnalysisEventListener<Student> {
    /**
     * 每读一行内容,都会调用一次该对象的invoke,在invoke可以操作使用读取到的数据
     * @param student
     * @param analysisContext
     */
    @Override
    public void invoke(Student student, AnalysisContext analysisContext) {
        System.out.println("invoke每次读取到的数据:"+student);
    }

    /**
     * 读取完整个文档之后,调用的方法
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}

3.写导入代码(这里我把代码写在了 测试类中)

@SpringBootTest
class EasyexcelApplicationTests {
    /**
     * 单实体导入
     */
    @Test
    void test01() {
        //---读excel---

        /**
         * 构建一个"读"的工作簿对象
         *pathName:要读的文件路径
         * head:文件中每一行数据要存储到的实体类(class)
         * readListener:读监听器,每读一行内容,都会调用一次该对象的invoke,在invoke可以操作使用读取到的数据
         */
        //1.获得一个工作簿对象
        ExcelReaderBuilder read = EasyExcel.read("学生表.xlsx", Student.class, new StudentListener());
        //2.获得一个工作表对象
        ExcelReaderSheetBuilder sheet = read.sheet();
        //3.读取工作表内容
        sheet.doRead();
    }
}

学生表.xlsx我放在了这个项目的目录里
在这里插入图片描述
运行结果:
在这里插入图片描述

导出功能

单实体导出

    /**
     * 单实体导出
     */
    @Test
    void test02() {
        //---写excel---

        //1.获得一个工作簿对象
        ExcelWriterBuilder write = EasyExcel.write("写学生表啦.xlsx", Student.class);
        //2.获得一个工作表对象
        ExcelWriterSheetBuilder sheet = write.sheet();
        //3.写
        sheet.doWrite(initData());
    }

    /**
     * 生成导出的数据
     * @return
     */
    private static List<Student> initData(){
        ArrayList<Student> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Student student = new Student();
            student.setName("root机器人"+i+"号");
            student.setGender("男");
            student.setAge(i+10);
            student.setSpecialty("干啥啥不行,干饭第一名。没啥特点"+i);
            list.add(student);
        }
        return list;
    }

运行结果:
在这里插入图片描述

修改样式

将导出的excel表头换成中文

将导出的excel表头换成中文,需使用注解 @ExcelProperty("")

@Data
public class Student {

    /**
     * 姓名
     */
    @ExcelProperty("姓名")
    private String name;
    /**
     * 性别
     */
    @ExcelProperty("性别")
    private String gender;
    /**
     *年龄
     */
    @ExcelProperty("年龄")
    private Integer age;
    /**
     *特点
     */
    @ExcelProperty("特点")
    private String specialty;
    /**
     * id
     */
    @ExcelProperty("ID")
    private Long id;
}

运行结果:
在这里插入图片描述

修改列宽

此时,特点的值比较长,需要将列宽改变,在Student类的字段上添加注解:@ColumnWidth(?) -------?:填写int值,默认是-1

    /**
     *特点
     */
    @ExcelProperty("特点")
    @ColumnWidth(40)
    private String specialty;

运行结果:
在这里插入图片描述

修改表头字段顺序

现在的表头顺序是姓名、性别、年龄、特点、ID
我想要他的顺序为ID、姓名、性别、年龄、特点
第一种解决方案是:将id字段,放在Student类最前面。(不推荐,不可能每次换位置都去调整)
第二种解决方案是:添加注解:@ExcelProperty(value = “ID”,index = 0) //不填写的话默认值是-1,0是第一列

运行结果:
在这里插入图片描述

设置字段不参与读和写

id一直没啥用,让它不参与读和写。注解:@ExcelIgnore

    /**
     * id
     */
    @ExcelProperty(value = "ID",index = 0)
    @ExcelIgnore
    private Long id;

写的运行结果:
在这里插入图片描述

格式化日期

在Student类添加birthday字段

    /**
     * 生日
     */
    @ExcelProperty("生日")
    @ColumnWidth(20)
    private Date birthday;

生成导出数据时,setBitthday

    /**
     * 生成导出的数据
     * @return
     */
    private static List<Student> initData(){
        ArrayList<Student> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Student student = new Student();
            student.setName("root机器人"+i+"号");
            student.setGender("男");
            student.setAge(i+10);
            student.setSpecialty("干啥啥不行,干饭第一名。没啥特点"+i);
            student.setBirthday(new Date());
            list.add(student);
        }
        return list;
    }

的运行结果:
在这里插入图片描述
此时,生日显示,日期加时间。在Student类的birthday字段上加注解,可格式化。@DateTimeFormat(“yyyy-MM-dd”)

    /**
     * 生日
     */
    @ExcelProperty("生日")
    @ColumnWidth(20)
    @DateTimeFormat("yyyy-MM-dd")
    private Date birthday;

的运行结果:
在这里插入图片描述

设置行高

均属于类注解
@HeadRowHeight(100)//表头行高
@ContentRowHeight(50)//内容行高

在这里插入图片描述

的运行结果:
在这里插入图片描述

设置sheet名称

    /**
     * 单实体导出
     */
    @Test
    void test02() {
        //---写excel---

        //1.获得一个工作簿对象
        ExcelWriterBuilder write = EasyExcel.write("写学生表啦.xlsx", Student.class);
        //2.获得一个工作表对象
        //ExcelWriterSheetBuilder sheet = write.sheet("");//默认为index----0
        ExcelWriterSheetBuilder sheet = write.sheet("学生表");//改名为学生表
        //3.写
        sheet.doWrite(initData());
    }

的运行结果:
在这里插入图片描述

表头上再添加公共表头

例子:@ExcelProperty({“我是歌手报名信息”,“生日”})

@Data
@HeadRowHeight(100)//表头行高
@ContentRowHeight(50)//内容行高
public class Student {

    /**
     * 姓名
     */
    @ExcelProperty({"我是歌手报名信息","姓名"})
    private String name;
    /**
     * 性别
     */
    @ExcelProperty({"我是歌手报名信息","性别"})
    private String gender;
    /**
     *年龄
     */
    @ExcelProperty({"我是歌手报名信息","年龄"})
    private Integer age;
    /**
     *特点
     */
    @ExcelProperty({"我是歌手报名信息","特点"})
    @ColumnWidth(40)
    private String specialty;

    /**
     * 生日
     */
    @ExcelProperty({"我是歌手报名信息","生日"})
    @ColumnWidth(20)
    @DateTimeFormat("yyyy-MM-dd")
    private Date birthday;
    /**
     * id
     */
    @ExcelProperty(value = "ID",index = 0)
    @ExcelIgnore
    private Long id;
}

的运行结果:
在这里插入图片描述

样式填充

1.根据模板样式导出多条数据

1.学生导出模板01:

在这里插入图片描述
2.测试类中的代码:

    /**
     * 根据模板样式导出多条数据
     */
    @Test
    void test03(){
        //模板路径
        String Template = "学生导出模板01.xlsx";
        //创建工作簿对象
        ExcelWriterBuilder excelWriterBuilder = EasyExcel.write("快来看我的多组数据导出结果.xlsx", Student.class).withTemplate(Template);
        //创建sheet对象
        ExcelWriterSheetBuilder sheet = excelWriterBuilder.sheet();
        //数据
        List<Student> list = initData();
        //导入数据(doXXX方法,会在读写后自动关闭流)
        sheet.doFill(list);
    }

3.运行结果:
在这里插入图片描述
在这里插入图片描述

2.根据模板样式导出多条数据(也含有单条数据)

1.学生导出模板02:
在这里插入图片描述

2.测试类中的代码:

    /**
     * 根据模板样式导出多条数据(包含单条数据)
     */
    @Test
    void test04(){
        //模板路径
        String Template = "学生导出模板02.xlsx";
        //创建工作簿对象
        ExcelWriter workBook = EasyExcel.write("多组数据(包含单条数据)导出结果.xlsx", Student.class).withTemplate(Template).build();
        //创建sheet对象
        WriteSheet sheet = EasyExcel.writerSheet().build();
        //换行
        FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();
        //多条数据
        List<Student> list = initData();
        //单条数据
        HashMap<String, Object> map = new HashMap<>();
        map.put("date",new Date());
        map.put("total",list.size());
        //多组填充
        workBook.fill(list,fillConfig,sheet);//这里加上换行,避免单组填充覆盖了多组填充的数据
        //单组填充
        workBook.fill(map,sheet);
        //关闭流
        workBook.finish();

    }

3.运行结果:
在这里插入图片描述

3.数据水平填充

1.学生水平导出模板03:
在这里插入图片描述
2.测试类中的代码:

    /**
     * 数据水平填充
     */
    @Test
    void test05(){
        //模板路径
        String Template = "学生水平导出模板03.xlsx";
        //创建工作簿对象
        ExcelWriter workBook = EasyExcel.write("水平填充导出结果.xlsx", Student.class).withTemplate(Template).build();
        //创建sheet对象
        WriteSheet sheet = EasyExcel.writerSheet().build();
        //水平填充
        FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
        //多条数据
        List<Student> list = initData();
        //多组填充
        workBook.fill(list,fillConfig,sheet);
        //关闭流
        workBook.finish();

    }

3.运行结果:
在这里插入图片描述

easyExcel拓展

1.easeExcel+springboot+mybatis+mysql导入导出实例

https://blog.csdn.net/qq_33745371/article/details/110822811

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
对于使用 EasyExcel 填充数据并导出的问题,可以按照以下步骤进行操作: 1. 导入 EasyExcel 相关的依赖库和类: ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.builder.ExcelWriterBuilder; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy; ``` 2. 创建实体类,用于存储要填充Excel 表格中的数据。假设你要导出的数据对象是 Student,包含姓名、年龄和性别属性: ```java public class Student { private String name; private int age; private String gender; // 省略构造方法、getter 和 setter 方法 } ``` 3. 创建填充数据的列表,并填充实际数据: ```java List<Student> studentList = new ArrayList<>(); // 添加学生对象到列表中 studentList.add(new Student("John", 20, "Male")); studentList.add(new Student("Mary", 22, "Female")); // 添加更多学生对象... ``` 4. 创建 ExcelWriter 对象和写入配置: ```java String exportFileName = "path/to/export/file.xlsx"; ExcelWriterBuilder writerBuilder = EasyExcel.write(exportFileName, Student.class) .registerWriteHandler(new SimpleColumnWidthStyleStrategy(15)); // 设置列宽度 ``` 5. 创建写入工作表(Sheet): ```java WriteSheet sheet = EasyExcel.writerSheet("Sheet1").build(); ``` 6. 将填充的数据写入工作表: ```java writerBuilder.sheet().doWrite(studentList); ``` 7. 关闭 ExcelWriter 对象释放资源: ```java writerBuilder.finish(); ``` 以上步骤可以完成 EasyExcel填充数据并导出操作。其中,你需要根据具体的需求自行调整 Excel 表格的样式、列宽等设置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiweilong123456

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值