java导出excel

一.查询出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);

后记,第一种经常怎么在后端处理,求大神指导(已经解决)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值