SpringBoot实现导出Excel功能(数据使用Mybatis-Plus分页插件)


直接上代码

Controller层

@Slf4j
@RestController
@RequestMapping("/thermal/tatsworksheettargetd")
public class TaTsWorksheetTargetDController {
    @Autowired
    private TaTsWorksheetTargetDService taTsWorksheetTargetDService;


    @GetMapping("/exportTargetD")
    public R exportTargetD(@RequestParam(value = "prvnceId",required = false)String prvnceId,
                           @RequestParam(value = "pageSize",defaultValue = "20")String pageSize,
                           @RequestParam(value = "pageNum",defaultValue = "1")String pageNum,
                           @RequestParam(value = "tsType",required = false)String tsType,
                           @RequestParam(value = "monthId",required = false)String monthId,
                           HttpServletResponse response) {
        try {
            taTsWorksheetTargetDService.exportTargetD(prvnceId,tsType,monthId,response);
            return R.ok();
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            return R.error("导出Excel出现错误!");
        }
    }
}

Service层

    void exportTargetD(String prvnceId, String tsType, String monthId, HttpServletResponse response);

ServiceImpl层

    @Override
    public void exportTargetD(String prvnceId,String tsType,String monthId,HttpServletResponse response) {
        try {
            ExcelWriter writer = new ExcelWriter(true,"投诉信息表");
            String fileName;
            //设置文件名称
            fileName = "投诉信息.xlsx";
            //创建标题映射
            exportTitleMap(writer);
            //未映射的不显示
            writer.setOnlyAlias(true);
            //设置分页条件
            //获取数据
            IPage<Map> excelList = taTsWorksheetTargetDDao.getMapData(new Page(1,99999),monthId,prvnceId,tsType);
            writer.write(excelList.getRecords());
            writer.autoSizeColumnAll();
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "iso8859-1"));
            ServletOutputStream out = response.getOutputStream();
            writer.flush(out, true);
            //关闭Writer,释放内存
            writer.close();
            //此处记得关闭输出Servlet流
            IoUtil.close(out);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
    }

遇到的问题

 

 

 首先,我们导出Excel需要调用查询接口获取数据,问题出现了,我们在查询接口的时候使用了Mybatis-Plus分页插件,所以我们需要拿Ipage<Map>来接收数据,但是当我们把excelList这个参数传给writer.write中时,会发现报错。

 

 

 导出Excel使用的是Hutool工具,分页使用的是Mybatis-Plus分页插件,个人觉得是这两种工具作者不同,不支持这样的传参。(小白一个如果有大神明白怎么回事希望能不吝赐教 ^ ^)

解决方案

点击进入Page类

 

 

 里面的 List<T> records 就是我们实际分页的数据,所以在刚才传参的地方传入excelList.getRecords()参数

 

 

 问题解决了


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM