maven:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
<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 {
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"));
response.setHeader("FileName", URLEncoder.encode("用户明细表.xlsx","UTF-8"));
response.setHeader("Access-Control-Expose-Headers", "FileName");
ServletOutputStream outputStream = response.getOutputStream();
EasyExcel.write(outputStream, RetailerExpolerData.class)
.sheet("sheet0")
.doWrite(retailerList);
outputStream.close();
return new Result(ResultCode.SUCCESS);
}
RetailerExpolerData:
@Data
@ExcelIgnoreUnannotated
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)
}).catch((error) => {})
}
vue中调用
import {export_retailer} from '../../api/retailer/retailer'
methods:{
export_ret(){
export_retailer()
},
}