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;

结束 快乐的一天 希望每天快乐

posted @ 2023-08-21 12:20  Smile☆  阅读(210)  评论(0编辑  收藏  举报