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()
  },
}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐