首页 > 其他分享 >easyexcel使用

easyexcel使用

时间:2023-05-08 13:55:13浏览次数:37  
标签:return String ColumnWidth easyexcel private response 使用 public

定义实体类

在EasyExcel中,以面向对象思想来实现导入导出,无论是导入数据还是导出数据都可以想象成具体某个对象的集合,所以为了实现导出用户信息功能,首先创建一个用户对象UserDO实体类,用于封装用户信息:

/**
 * 用户信息
 *
 * @author william@StarImmortal
 */
@Data
public class UserDO {
    @ExcelProperty("用户编号")
    @ColumnWidth(20)
    private Long id;

    @ExcelProperty("用户名")
    @ColumnWidth(20)
    private String username;

    @ExcelIgnore
    private String password;

    @ExcelProperty("昵称")
    @ColumnWidth(20)
    private String nickname;

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

    @ExcelProperty("手机号")
    @ColumnWidth(20)
    private String phone;

    @ExcelProperty("身高(米)")
    @NumberFormat("#.##")
    @ColumnWidth(20)
    private Double height;

    @ExcelProperty(value = "性别", converter = GenderConverter.class)
    @ColumnWidth(10)
    private Integer gender;
}

上面代码中类属性上使用了EasyExcel核心注解:

  • @ExcelProperty:核心注解,value属性可用来设置表头名称,converter属性可以用来设置类型转换器;
  • @ColumnWidth:用于设置表格列的宽度;
  • @DateTimeFormat:用于设置日期转换格式;
  • @NumberFormat:用于设置数字转换格式。

自定义转换器

在EasyExcel中,如果想实现枚举类型到字符串类型转换(例如gender属性:1 -> 男2 -> 女),需实现Converter接口来自定义转换器,下面为自定义GenderConverter性别转换器代码实现:

/**
 * Excel 性别转换器
 *
 * @author william@StarImmortal
 */
public class GenderConverter implements Converter<Integer> {
    @Override
    public Class<?> supportJavaTypeKey() {
        return Integer.class;
    }

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

    @Override
    public Integer convertToJavaData(ReadConverterContext<?> context) {
        return GenderEnum.convert(context.getReadCellData().getStringValue()).getValue();
    }

    @Override
    public WriteCellData<?> convertToExcelData(WriteConverterContext<Integer> context) {
        return new WriteCellData<>(GenderEnum.convert(context.getValue()).getDescription());
    }
}
/**
 * 性别枚举
 *
 * @author william@StarImmortal
 */
@Getter
@AllArgsConstructor
public enum GenderEnum {

    /**
     * 未知
     */
    UNKNOWN(0, "未知"),

    /**
     * 男性
     */
    MALE(1, "男性"),

    /**
     * 女性
     */
    FEMALE(2, "女性");

    private final Integer value;

    @JsonFormat
    private final String description;

    public static GenderEnum convert(Integer value) {
        return Stream.of(values())
                .filter(bean -> bean.value.equals(value))
                .findAny()
                .orElse(UNKNOWN);
    }

    public static GenderEnum convert(String description) {
        return Stream.of(values())
                .filter(bean -> bean.description.equals(description))
                .findAny()
                .orElse(UNKNOWN);
    }
}

定义接口

/**
 * EasyExcel导入导出
 *
 * @author william@StarImmortal
 */
@RestController
@RequestMapping("/excel")
public class ExcelController {

    @GetMapping("/export/user")
    public void exportUserExcel(HttpServletResponse response) {
        try {
            this.setExcelResponseProp(response, "用户列表");
            List<UserDO> userList = this.getUserList();
            EasyExcel.write(response.getOutputStream())
                    .head(UserDO.class)
                    .excelType(ExcelTypeEnum.XLSX)
                    .sheet("用户列表")
                    .doWrite(userList);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 设置响应结果
     *
     * @param response    响应结果对象
     * @param rawFileName 文件名
     * @throws UnsupportedEncodingException 不支持编码异常
     */
    private void setExcelResponseProp(HttpServletResponse response, String rawFileName) throws UnsupportedEncodingException {
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        String fileName = URLEncoder.encode(rawFileName, "UTF-8").replaceAll("\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
    }
    
    /**
     * 读取用户列表数据
     *
     * @return 用户列表数据
     * @throws IOException IO异常
     */
    private List<UserDO> getUserList() throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        ClassPathResource classPathResource = new ClassPathResource("mock/users.json");
        InputStream inputStream = classPathResource.getInputStream();
        return objectMapper.readValue(inputStream, new TypeReference<List<UserDO>>() {
        });
    }
}

标签:return,String,ColumnWidth,easyexcel,private,response,使用,public
From: https://www.cnblogs.com/caoaman/p/17381514.html

相关文章

  • 相机拍照替换 IOS手机端安装使用教程
    相机拍照替换IOS手机端安装使用教程一、适用机型及系统1、机型:所有iphone机型,可越狱即可2、系统:支持13系统及以上所有可越狱系统二、安装手机端1、越狱(1)Windows越狱方法:电脑端安装爱思助手,点击工具-----》一键越狱-----》选择uncover----》开始越狱,如提示需要登录,点击商城,注册......
  • 【花雕学AI】32:WeTab——使用 ChatGPT 聊天的新标签页,免费又好用
    引言:你是否厌倦了每次打开浏览器都看到同样的新标签页?你是否想要让你的新标签页更有个性,更有趣,更有用?如果是的话,那么你一定要试试WeTab!WeTab是一款免费的浏览器扩展,它可以让你用小组件自定义你的新标签页,让它变成你想要的样子。你可以添加时钟,天气,日历,待办事项,收藏夹等各种实......
  • Linux下面误删除文件使用extundelete工具恢复介绍
    操作系统版本:CentOSrelease6.4(Final)   软件版本:extundelete-0.2.4.tar.bz2PS:该软件恢复文件系统仅支持ext2/ext3/ext41.创建文件系统[root@zw_test_26_74/]# mkfs-text4/dev/sdb32.查看文件系统类型[root@zw_test_26_74/]#blkid/dev/sdb3 --查看文件系......
  • Linux下面误删除文件使用extundelete工具恢复介绍
    1.使用rz命令上传extundelete-0.2.4.tar.bz2到/tmp文件夹下并解压软件。1[root@localhosttmp]#tar-jxvfextundelete-0.2.4.tar.bz22.进入到extundelete解压的目录下面,执行编译安装。1234567891011[root@localhost test]#cd/tmp[r......
  • jmeter逻辑控制器使用
    一、jemeter控制器的种类1.简单控制器(SimpleController)作用:分组,用来组合取样器和其他逻辑控制器 2.循环控制器(LoopController)作用:控制该控制器下请求的循环次数例如下图中线程数为2,循环控制器次数为3,执行后HomePage执行了2次,NewsPage执行了6次(线程2*循环3次)如果勾选了f......
  • 使用Zxing二维码生成
    1、引用依赖<dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.3</version></dependency><dependency>......
  • MobaXterm使用笔记
    设置自动保存logsession的log可以自动保存,在setting里设置,主要包括保存路径,log默认格式话名字,log是否带时间戳(好用)关于格式log名字,参考下图,不修改为默认保存名字 这是我自己的格式[&N](&M-&D_&T) 个性化sessiontab多个tab都是一样名字不容易分辨,可以个性化tab,包括设......
  • Excel正确使用VLOOKUP函数,快速查询匹配数据!
    #vlookup函数#在Excel当中我们如何正确地使用vlookup函数快速解决数据查询匹配的问题。 比如在下面的表格的当中,我们需要查询香蕉、桂圆、桃子这三种水果在武汉的销量 此时我们就需要在空白单元格里输入一个等于号和vlookup函数,接着可以看到此函数共有四个参数......
  • 使用UE做动画编辑-VRAnimEditor
    这个编辑不同于blender,和UE中的动画编辑。我的动画编辑基于VR中姿态矫正,以及补帧插值方式做处理。好处: 传统的动画编辑 需要花费大量时间,比较好的动作捕捉使用起来有局限,大厂用的AI模拟生物应该没到实用阶段,而这个使用VR矫正姿态,可以缩短时间,并且实时预览,效果好(不管是编辑还......
  • 使用宝塔面板检测URL状态码是否返回500,并在出现问题时自动重启Nginx脚本
    脚本只支持检测一条url状态码,将url中的网址更改为你需要检测的网址。#!/bin/bashurl="https://www.cnblogs.com/shenjingwa/"status_code=$(curl-o/dev/null-s-w%{http_code}$url)if[$status_code-eq500];then/etc/init.d/nginxrestartfi并在宝塔面板......