最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

【全球快播报】springboot使用easyExcel导出Excel表格以及LocalDateTime时间类型转换问题

来源:博客园

以下内容仅供学习使用

正文:

hutool官网:https://hutool.cn/docs/#/easyExcel官网: https://easyexcel.opensource.alibaba.com/


(相关资料图)

1. 首先引入pom.xml依赖

            cn.hutool            hutool-all            5.7.20                            org.apache.poi            poi-ooxml            4.1.2                            com.alibaba            easyexcel            3.2.1        

2. 实体类

import com.alibaba.excel.annotation.ExcelProperty;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import com.el.springboot.config.LocalDateTimeConverter;import com.fasterxml.jackson.annotation.JsonFormat;import lombok.Getter;import lombok.Setter;import java.io.Serializable;import java.time.LocalDateTime;/** * 

* *

* * @author el * @since 2023-03-19 */@Getter@Setter@TableName("sys_user")public class User implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 用户名 */ private String username; /** * 密码 */ private String password; /** * 昵称 */ private String nickname; /** * 邮箱 */ private String email; /** * 号码 */ private String phone; /** * 地址 */ private String address; /** * 创建时间 */ @ExcelProperty(value = "创建时间", converter = LocalDateTimeConverter.class) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") //@ExcelIgnore private LocalDateTime createTime; /** * 头像 */ private String avatarUrl;}

3. controller类使用

/**     * 导出接口     */    @GetMapping("/export")    public void export(HttpServletResponse response) throws Exception {        // 从数据库查询出所有的数据        List list = userService.list();        // 通过工具类创建writer 写出到磁盘路径//        ExcelWriter writer = ExcelUtil.getWriter(filesUploadPath + "/用户信息.xlsx");        // 在内存操作,写出到浏览器        ExcelWriter writer = ExcelUtil.getWriter(true);        //自定义标题别名        writer.addHeaderAlias("username", "用户名");        writer.addHeaderAlias("password", "密码");        writer.addHeaderAlias("nickname", "昵称");        writer.addHeaderAlias("email", "邮箱");        writer.addHeaderAlias("phone", "电话");        writer.addHeaderAlias("address", "地址");        writer.addHeaderAlias("createTime", "创建时间");        writer.addHeaderAlias("avatarUrl", "头像");        // 一次性写出list内的对象到excel,使用默认样式,强制输出标题        writer.write(list,true);        // 设置浏览器响应的格式        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");        String fileName = URLEncoder.encode("用户信息", "UTF-8");        response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");        ServletOutputStream out = response.getOutputStream();        writer.flush(out, true);        out.close();        writer.close();    }

4. 注意事项!(很重要!!!)

因为easyExcel不支持LocalDateTime的时间类型格式

所以需要自己新建一个config配置然后新建LocalDateTimeConverter类

import com.alibaba.excel.converters.Converter;import com.alibaba.excel.enums.CellDataTypeEnum;import com.alibaba.excel.metadata.GlobalConfiguration;import com.alibaba.excel.metadata.data.ReadCellData;import com.alibaba.excel.metadata.data.WriteCellData;import com.alibaba.excel.metadata.property.ExcelContentProperty;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;public class LocalDateTimeConverter implements Converter {    @Override    public Class supportJavaTypeKey() {        return LocalDateTime.class;    }    @Override    public CellDataTypeEnum supportExcelTypeKey() {        return CellDataTypeEnum.STRING;    }    @Override    public LocalDateTime convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty,                                           GlobalConfiguration globalConfiguration) {        return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));    }    @Override    public WriteCellData convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty,                                                    GlobalConfiguration globalConfiguration) {        return new WriteCellData(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));    }}

5. 最后就是在实体类哪里看到的最后效果

/**     * 创建时间     */    @ExcelProperty(value = "创建时间", converter = LocalDateTimeConverter.class)    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")    //@ExcelIgnore    private LocalDateTime createTime;

6. 效果

6.1 postman测试接口

6.2 建议点击下面这个,这样子就可以自动生成一个Excel表格了!

6.3 或者浏览器直接输入地址默认自己下载

7. 最终效果图

关键词: