java的EasyExcel+axios导出excel

maven:

<!-- easyexcel -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>
<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.6</version>
</dependency>

controller:

@RequestMapping(value = "retailer_export",method = RequestMethod.GET)
public Result exportRetailer( HttpServletResponse response,@RequestParam Map map) throws IOException {
    // 调service
    List<Retailer> retailers = retailerService.findAll(map);
    List<RetailerExpolerData> retailerList = new ArrayList<>();
    retailers.forEach(item->{
        RetailerExpolerData retailerExpolerData = new RetailerExpolerData();
        retailerExpolerData.setName(item.getName());
        retailerExpolerData.setUsername(item.getUsername());
        retailerExpolerData.setProvince(item.getProvince());
        retailerExpolerData.setCity(item.getCity());
        retailerExpolerData.setDistrict(item.getDistrict());
        retailerList.add(retailerExpolerData);
    });
    response.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode("用户明细表.xlsx","UTF-8"));
    // 将文件名设置到头信息 js中要用
    response.setHeader("FileName",   URLEncoder.encode("用户明细表.xlsx","UTF-8"));
     // 加入头信息白名单
    response.setHeader("Access-Control-Expose-Headers", "FileName");
    ServletOutputStream outputStream = response.getOutputStream();
    // 把IO交给EasyExcel
    EasyExcel.write(outputStream, RetailerExpolerData.class)
            .sheet("sheet0")
            .doWrite(retailerList);
    outputStream.close();
    return new Result(ResultCode.SUCCESS);
}

RetailerExpolerData:

@Data
@ExcelIgnoreUnannotated // 下面字段中添加@ExcelProperty的会导出,不添加的不导出
public class RetailerExpolerData {
    @ColumnWidth(50)
    @ExcelProperty("用户名")
    private String username;

    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("省")
    private String province;

    @ExcelProperty("市")
    private String city;

    @ExcelProperty("区")
    private String district;
}

axios请求

export function export_retailer () {
  return axios({
    method:'get',
    url: 'retailer-service/retailer_export',
    responseType: 'blob'
  }).then(res => {
    let data = res.data
    let filename = "用户明细表.xlsx"
    if(res.headers.filename){
      filename = decodeURI(res.headers.filename)
    }
    let url = window.URL.createObjectURL(new Blob([data]))
    let link = document.createElement('a')
    link.style.display = 'none'
    link.href = url
    link.setAttribute('download',filename)

    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link) // 下载完成移除元素
    window.URL.revokeObjectURL(url) // 释放掉blob对象
  }).catch((error) => {})
}

vue中调用

import {export_retailer} from '../../api/retailer/retailer'
methods:{
  export_ret(){
   export_retailer()
  },
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

just路人周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值