EasyExcel导出Excel指定属性列

背景:

        所见即所得,动态列表导出。前端传递需要导出的字段,后端根据前端的字段导出对应字段列的值到Excel

1.所需JAR包

        <!--阿里巴巴EasyExcel依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.7</version>
        </dependency>

2.导出实体类

package com.bulls.bigdataexport.controller;

import cn.afterturn.easypoi.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class DemoDTO {
    @ExcelIgnore
    private int id;

    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("编号")
    private String code;

    @ExcelProperty("年龄")
    private String age;

    @ExcelProperty("性别")
    private String sex;

    @ExcelProperty("地址")
    private String address;

    @ExcelProperty("出生时间")
    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    private Date birthday;
}

3.实现代码:

    @GetMapping("/exportExcel")
    public void test(HttpServletResponse response, String column) {
        try {
            exportExcel(response, column);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void exportExcel(HttpServletResponse response, String column) throws IOException {
        List<DemoDTO> demos = new ArrayList<>();
        DemoDTO dto = new DemoDTO();
        dto.setId(1);
        dto.setName("张三");
        dto.setAge("20");
        dto.setCode("0000001");
        demos.add(dto);
        DemoDTO dto1 = new DemoDTO();
        dto1.setId(2);
        dto1.setName("李四");
        dto1.setAge("21");
        dto1.setCode("0000002");
        demos.add(dto1);
        //前端传入的需要导出的列
        Set<String> columns = new HashSet<String>(Arrays.asList(column.split(",")));
        // 测试用
        //这里需要指定用哪个class去写,然后写到第一个sheet,名字为模板
        EasyExcel.write("D:\\excel"+System.currentTimeMillis()+".xlsx", DemoDTO.class)
                .includeColumnFiledNames(columns).sheet("模板")
                .doWrite(demos);

        // 前后端导出
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("UTF-8");
        // 这里URLEncoder.encode可以防止中文乱码
        String fileName = URLEncoder.encode("ExcelName", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        response.setHeader("fileName",  fileName + ".xlsx");

        EasyExcel.write(response.getOutputStream(), DemoDTO.class)
                .includeColumnFiledNames(columns).sheet("模板")
                .doWrite(demos);
    }

 4.导出结果展示

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要设置指定以文本形式存储数据,可以使用 EasyExcel 的注解方式来实现。具体实现步骤如下: 1. 定义一个 JavaBean 类,用来存储导出的数据,并在类的属性上使用注解 `@ExcelProperty` 来标识每个属性对应的。 ```java public class Student { @ExcelProperty("学生ID") private Integer id; @ExcelProperty(value = "姓名", index = 1) private String name; @ExcelProperty(value = "年龄", index = 2) private Integer age; @ExcelProperty(value = "成绩", index = 3, converter = TextConverter.class) private String score; //其他属性和方法省略 } ``` 2. 定义一个转换器 `TextConverter`,用来将成绩转换为文本形式存储。 ```java public class TextConverter implements Converter<String> { @Override public Class supportJavaTypeKey() { return String.class; } @Override public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { return new CellData(value); } @Override public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { return cellData.getStringValue(); } } ``` 3. 导出 Excel 时,在写入数据的时候,使用 `EasyExcel.write()` 方法创建一个写入器,然后使用 `write()` 方法写入数据。 ```java public void export(List<Student> students, HttpServletResponse response) throws IOException { String fileName = "学生信息表.xlsx"; response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8")); EasyExcel.write(response.getOutputStream(), Student.class).sheet("Sheet1").doWrite(students); } ``` 在写入数据的过程中,如果成绩属性上使用了 `TextConverter` 转换器,那么 EasyExcel 会自动将成绩的数据以文本形式存储到 Excel 中,而不是默认的数值形式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值