springboot导出excel操作

业务场景:

后台需要提供一个导出所有数据的接口,将导出的excel表格返回给前端展示

代码层面:

展示主要跟导出功能相关的代码,主要流程:获取业务数据,形成excel数据流,导出excel

 @PostMapping(value = "/v1/analysis/mission/readrecordExport")
    public void readrecordExport(@RequestBody MissionReadRecordRequest missionReadRecordRequest,HttpServletResponse response) throws IOException {
        missionReadRecordRequest.setPage(1);
        missionReadRecordRequest.setSize(99999);
        if(missionReadRecordRequest.getBeginTime()==null){
            missionReadRecordRequest.setBeginTime(DateUtils.getDate(-30));
        }
        if(missionReadRecordRequest.getEndTime()==null){
            missionReadRecordRequest.setEndTime(new Date());
        }else{
            missionReadRecordRequest.setEndTime(DateUtils.getDateAfter(missionReadRecordRequest.getEndTime(),1));
        }
        List<MissionReadRecord> list = missionReadRecordService.getMemberMissionReadRecordList(missionReadRecordRequest);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss");
        String title = simpleDateFormat.format(new Date()) + ".xls";
        //使用流将数据导出
        OutputStream out = null;
        try {
            out = response.getOutputStream();
            //防止中文乱码
            response.setHeader("Content-Type", "application/x-xls");
            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
            response.setHeader("Content-Disposition", "attachment;fileName=" + new String(title.getBytes(), "UTF-8"));

            Map<String, String> headers = new LinkedHashMap<>();
            headers.put("createTime", "创建时间");
            headers.put("jobType", "任务类型");
            headers.put("readContentType", "阅读内容类型");
            headers.put("title", "内容标题");
            headers.put("objectId", "内容id");
            headers.put("coinAmount", "奖励金币数");
            headers.put("readTime", "阅读时长");
            headers.put("todayCount", "当日同类奖励计数");
            List<Map<String, Object>> dataset = list.stream()
                    .map(dto -> {
                        Map<String, Object> map = new HashMap<>();
                        map.put("createTime", dto.getCreateTime());
                        map.put("jobType", dto.getJobType());
                        map.put("readContentType", dto.getReadContentType());
                        map.put("title", dto.getTitle());
                        map.put("objectId", dto.getObjectId());
                        map.put("coinAmount", dto.getCoinAmount());
                        map.put("readTime", dto.getReadTime());
                        map.put("todayCount", dto.getTodayCount());
                        return map;
                    })
                    .collect(Collectors.toList());
            ExcelUtil.exportExcelwithTitle(title, headers, dataset, out, "yyyy-MM-dd HH:mm:ss");
        } finally {
            if (out != null) {
                out.flush();
            }
            if (out != null) {
                out.close();
            }
        }
    }
package com.mongcent.core.commons.ui.ExcelUtil;

import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collectio
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值