一.查询出List<YxStoreOrderDto>你需要的对象
使用方法点击 调用handleExportOption()方法,传入tableData数据,返回处理重点这里不处理用不了,不懂什么原因。
handleExportOption(){
downexcelservice(this.tableData).then(result =>{
const name= '数据'
const suffix = 'xlsx'
const obj=result
// 创建文件的Blob URL
const url = window.URL.createObjectURL(new Blob([obj]))
// 创建隐藏的<a>元素用于触发下载
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
// 生成文件名,结合当前时间,确保文件名唯一性
const fileName = parseTime(new Date()) + '-' + name + '.' + suffix
link.setAttribute('download', fileName)
// 将<a>元素添加到文档中,触发点击后移除
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
})
},
前端调用 responseType: 'blob' 返回必须是这个上面调用处理才不会出错,get和post请求无所谓。
export function downexcelservice(data) {
return request({
url: 'api/downexcel',
method: 'post',
data,
responseType: 'blob'
})
后端接口 数据如果不需要从前端传 就从后端自己查
@ApiOperation(value = "导出数据")
@PostMapping(value ="/downexcel")
public void downexcel(HttpServletResponse response,
@RequestBody List<YxStoreOrderList> yxStoreOrderList)throws IOException{
// List<YxStoreOrderList> yxStoreOrderList= yxStoreOrderService.downexcel();
List<Map<String, Object>> list = new ArrayList<>();
for(YxStoreOrderList yx:yxStoreOrderList){
Map<String, Object> map = new LinkedHashMap<>();
map.put("下单时间",yx.getPayTime());
map.put("类别",yx.getCateName());
map.put("商品名称",yx.getStoreName()) ;
map.put( "购买数量", yx.getTotalNum()) ;
map.put("单价(元)",yx.getPayPrice()) ;
map.put("总金额",yx.getTotalPrice()) ;
map.put( "支付方式",yx.getPayType()) ;
map.put( "核销昵称",yx.getVerifyCode()) ;
map.put("核销码",yx.getVerifgName()) ;
map.put( "核销真实姓名",yx.getVerifgRealname()) ;
map.put( "核销时间",yx.getVerifgTime()) ;
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
//调用接口,接口位置需要自己定义
FileUtil.downloadExcel(list, response);
}
内容展示
查询出来的对象转化为List<Map<String, Object>>
主要方法
public static void downloadExcel(List<Map<String, Object>> list, HttpServletResponse response) throws IOException {
//保存路径
String tempPath =System.getProperty("java.io.tmpdir") + IdUtil.fastSimpleUUID() + ".xlsx";
File file = new File(tempPath);//创建文件
BigExcelWriter writer= ExcelUtil.getBigWriter(file);
// 一次性写出内容,使用默认样式,强制输出标题
writer.write(list, true);
//response为HttpServletResponse对象
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content-Disposition","attachment;filename=file.xlsx");
ServletOutputStream out=response.getOutputStream();
// 终止后删除临时文件
file.deleteOnExit();
writer.flush(out, true);
//此处记得关闭输出Servlet流
IoUtil.close(out);
}
第二种方法
缺点不能显示在浏览器下载,直接保存在本地磁盘
方法(如下)
@ApiOperation(value = "导出数据")
@PostMapping(value ="/downexcel")
public ResponseEntity downexcel(@RequestBody List<YxStoreOrderList> yxStoreOrderList,HttpServletResponse response )throws IOException,ParseException{
Workbook workbook = new XSSFWorkbook();
// 创建一个新的工作表
Sheet sheet = workbook.createSheet("Sample Sheet");
// 创建标题行
Row headerRow = sheet.createRow(0);
String[] columns = {"下单时间", "类别", "商品名称", "购买数量", "单价(元)", "总金额", "支付方式","核销码","核销昵称","核销真实姓名","核销时间"};
for (int i = 0; i < columns.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(columns[i]);
}
// 填充数据到工作表中
for(int i=1;i<yxStoreOrderList.size();i++){
Row row = sheet.createRow(i);
row.createCell(0).setCellValue(yxStoreOrderList.get(i).getPayTime());
row.createCell(1).setCellValue(yxStoreOrderList.get(i).getCateName());
row.createCell(2).setCellValue(yxStoreOrderList.get(i).getStoreName());
row.createCell(3).setCellValue(yxStoreOrderList.get(i).getTotalNum());
row.createCell(4).setCellValue(String.valueOf(yxStoreOrderList.get(i).getPayPrice()));
row.createCell(5).setCellValue(String.valueOf(yxStoreOrderList.get(i).getTotalPrice()));
row.createCell(6).setCellValue(String.valueOf(yxStoreOrderList.get(i).getPayType()));
row.createCell(7).setCellValue(yxStoreOrderList.get(i).getVerifyCode());
row.createCell(8).setCellValue(yxStoreOrderList.get(i).getVerifgName());
row.createCell(9).setCellValue(yxStoreOrderList.get(i).getVerifgRealname());
row.createCell(9).setCellValue(yxStoreOrderList.get(i).getVerifgTime());
}
// 自动调整列宽
for (int i = 0; i < columns.length; i++) {
sheet.autoSizeColumn(i);
}
String randomUUID = UUID.randomUUID().toString().substring(32);
String fileName=randomUUID+".xlsx";
String savePath=System.getProperty("java.io.tmpdir");
File file = new File(savePath, fileName);
// 将工作簿写入文件系统
try (FileOutputStream fileOut = new FileOutputStream(file)) {
workbook.write(fileOut);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return new ResponseEntity(savePath+fileName,HttpStatus.OK);