java 中使用导入 导出 excel文件( Easy Excel 2.x )
前提是依赖必须导入:
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.0-beta2</version>
</dependency>
导出
首先在自己的接口中创建一个方法为导出的方法:
/** * 数据导出 * * @param httpServletResponse 接收数据信息 */ void exportData(HttpServletResponse httpServletResponse);
然后在实现类中实现该方法:
/* * 数据导出
*
* @param httpServletResponse 接收数据信息 */ @Override public void exportData(HttpServletResponse httpServletResponse) { try {
//设置响应格式 httpServletResponse.setContentType("application/vnd.ms-excel");
// 编码格式 httpServletResponse.setCharacterEncoding("utf-8"); // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
// 导出的名字 String fileName = URLEncoder.encode("数据字典", "UTF-8");
// 响应的头信息 及文件名字 httpServletResponse.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); //查询数据库数据 List<Dict> dictList = baseMapper.selectList(null);
// 转换格式 转为返回给前端的vo对象 也可以不转 看自己的需求 List<DictEeVo> dictVoList = new ArrayList<>(dictList.size()); for (Dict dict : dictList) { DictEeVo dictVo = new DictEeVo(); BeanUtils.copyProperties(dict, dictVo, DictEeVo.class); dictVoList.add(dictVo); }
// 转换完成进行写入然后写入 EasyExcel.write(httpServletResponse.getOutputStream(), DictEeVo.class).sheet("数据字典").doWrite(dictVoList); } catch (IOException e) { e.printStackTrace(); } }
最后在Controller层编写接口 调用实现类中的方法:
/** * 导出数据信息 */ @GetMapping("export/data") public void exportData(HttpServletResponse response) { cmnService.exportData(response); }
导入
首先跟上面一样 设置导入接口:
/** * 导入数据 * * @param file 上传文件信息 */ void importData(MultipartFile file);
导入的时候是需要的一个监听器的 :
在自己的监听文件夹中编写监听器:
/** * @author 宋 * @date 2023/8/21 0021 11:33 * @mood happy */ @Configuration public class DictListener extends AnalysisEventListener<DictEeVo> { // 操作的mapper private final CmnMapper cmnMapper; // 有参构造 需要操作数据库的时候进行创建 不需要的话 可以使用无参构造 public DictListener(CmnMapper cmn) { this.cmnMapper = cmn; } /** * 执行读取数据 一次一行 * * @param dictEeVo * @param analysisContext */ @Override public void invoke(DictEeVo dictEeVo, AnalysisContext analysisContext) {
// 我是使用的mybatisPlus 所以插入的时候是需要dict对象的 需要转换 Dict dict = new Dict(); // 转换填充对象 BeanUtils.copyProperties(dictEeVo, dict); // 添加 数据信息 cmnMapper.insert(dict); } /** * 读取结束 * * @param analysisContext */ @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 可以在这里做一些自己的需求操作 } }
然后编写实现类 进行实现:
/** * 导入数据 * * @param file 上传文件信息 */ @Override public void importData(MultipartFile file) { try {
// 直接使用流的形式写入 参数二 封装的什么对象 参数三 监听器(有参构造传参 无参构造无需传参) EasyExcel.read(file.getInputStream(), DictEeVo.class, new DictListener(cmnMapper)).sheet().doRead(); } catch (IOException e) { e.printStackTrace(); } }
如果上面传的参数 cmnMapper 找不到 爆红 就在自己的这个类中 加上 注入一下:
@Autowired
CmnMapper cmnMapper;
结束 快乐的一天 希望每天快乐
祝你今天愉快🤗微笑每一天💕💕💕
时间仓促,如有错误欢迎指出,欢迎在评论区讨论,如对您有帮助还请点个推荐、关注支持一下
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
若内容有侵犯您权益的地方,请公告栏处联系本人,本人定积极配合处理或删除。