EasyExcel-写文件
EasyExcel官方文档
https://easyexcel.opensource.alibaba.com/
写文件示例
引入依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.1</version> </dependency>
entity实体类
package com.atguigu.yygh.model.cmn; import com.atguigu.yygh.model.base.BaseEntity; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; import java.util.HashMap; import java.util.Map; @Data @ApiModel(description = "数据字典") @TableName("dict") public class Dict { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "id") private Long id; @ApiModelProperty(value = "创建时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("create_time") private Date createTime; @ApiModelProperty(value = "更新时间") @TableField("update_time") private Date updateTime; @ApiModelProperty(value = "逻辑删除(1:已删除,0:未删除)") @TableLogic @TableField("is_deleted") private Integer isDeleted; @ApiModelProperty(value = "其他参数") @TableField(exist = false) private Map<String,Object> param = new HashMap<>(); @ApiModelProperty(value = "上级id") @TableField("parent_id") private Long parentId; @ApiModelProperty(value = "名称") @TableField("name") private String name; @ApiModelProperty(value = "值") @TableField("value") private String value; @ApiModelProperty(value = "编码") @TableField("dict_code") private String dictCode; @ApiModelProperty(value = "是否包含子节点") @TableField(exist = false) private boolean hasChildren; }
vo对象
package com.atguigu.yygh.vo.cmn; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.metadata.BaseRowModel; import lombok.Data; @Data public class DictEeVo { //index表示excel中的第几列 @ExcelProperty(value = "id" ,index = 0) private Long id; @ExcelProperty(value = "上级id" ,index = 1) private Long parentId; @ExcelProperty(value = "名称" ,index = 2) private String name; @ExcelProperty(value = "值" ,index = 3) private String value; @ExcelProperty(value = "编码" ,index = 4) private String dictCode; }
service接口
package com.atguigu.yygh.cmn.service; import com.atguigu.yygh.model.cmn.Dict; import com.baomidou.mybatisplus.extension.service.IService; import javax.servlet.http.HttpServletResponse; import java.util.List; public interface DictService extends IService<Dict> { void exportData(HttpServletResponse response); }
service实现类
package com.atguigu.yygh.cmn.service.impl; import cn.hutool.core.bean.BeanUtil; import com.alibaba.excel.EasyExcel; import com.atguigu.yygh.cmn.mapper.DictMapper; import com.atguigu.yygh.cmn.service.DictService; import com.atguigu.yygh.model.cmn.Dict; import com.atguigu.yygh.vo.cmn.DictEeVo; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Service public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements DictService { @Override public void exportData(HttpServletResponse response) { ServletOutputStream os = null; try { os = response.getOutputStream(); //设置ContentType为excel类型 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); //文件名 String fileName = URLEncoder.encode("数据字典", "UTF-8"); //操作以文件下载方式 response.setHeader("Content-disposition", "attachment;filename="+ fileName + ".xlsx"); //查询数据 List<Dict> dictList = baseMapper.selectList(null); List<DictEeVo> dictVoList = new ArrayList<>(dictList.size()); for(Dict dict : dictList){ DictEeVo dictVo = new DictEeVo(); //将Dict中属性值赋值到dictVo中 BeanUtils.copyProperties(dict,dictVo); dictVoList.add(dictVo); } EasyExcel.write(os,DictEeVo.class) .sheet("数据字典") .doWrite(dictVoList); } catch (IOException e) { throw new RuntimeException(e); }finally { try { os.close(); } catch (IOException e) { throw new RuntimeException(e); } } } }
controller
package com.atguigu.yygh.cmn.controller; import com.atguigu.yygh.cmn.service.DictService; import com.atguigu.yygh.common.result.Result; import com.atguigu.yygh.model.cmn.Dict; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; @Slf4j @Api("数据字典的接口") @RestController @RequestMapping("admin/cmn/dict") @CrossOrigin public class DictController { @Autowired DictService dictService; @ApiOperation(value="导出") @GetMapping(value = "/exportData") public void exportData(HttpServletResponse response) { dictService.exportData(response); } }
前端:
<div class="el-toolbar"> <div class="el-toolbar-body" style="justify-content: flex-start;"> <el-button type="text" @click="exportData"><i class="fa fa-plus"/> 导出</el-button> </div> </div>
exportData(){ window.location.href = 'http://localhost:8202/admin/cmn/dict/exportData' }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律