java实现Excel导出功能

前言

最近有个项目需求,用java实现Excel导出功能,刚开始没接触过,有点蒙,找了一些资料看了才明白一些,在这里做下记录。

我使用的是@ExcelProperty注解,这个注解是匹配Excel和实体类字段之间的关系,也就是说实体类的字段使用了这个注解就会出现在Excel表头。@ExcelIgnore这个注解的意思就是忽略该字段,不写入Excel。

代码

controller

@SneakyThrows
@SysLog("导出")
@PostMapping(value = "/export")
@ApiOperation(value = "导出", notes = "导出")
public void exportData(HttpServletResponse response, @RequestBody Orde orde) {
    OrdeService.exportExcel(response, search);
}

service

void exportExcel(HttpServletResponse response, Orde orde) throws IOException;

impl

@Override
    public void exportExcel(HttpServletResponse response, Orde orde) throws IOException {
        this.exportData(ordeh, response);
    }
private void exportData(Orde orde, HttpServletResponse response) throws IOException {
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
        String name = "Excel名称";
        AbstractSheetWriteHandler handler = new OrdeHandler();
        //编码 防止中文乱码
        String fileName = URLEncoder.encode(StrUtil.isNotBlank(name) ? name : "下载", StandardCharsets.UTF_8.name());
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        List<WorkExcelVO> workVOList = this.baseMapper.listVo(orde);
​
        if (CollectionUtils.isNotEmpty(workVOList)) {
            resetWorkOrderExcel(workVOList);
        }
​
        EasyExcel.write(response.getOutputStream(), WorkExcelVO.class)
                    .sheet(name).registerWriteHandler(handler)
                    .registerWriteHandler(ExcelWorkOrdeStyleUtil.cellStyleStrategy()).doWrite(workVOList);
    }

response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding(StandardCharsets.UTF_8.name()); String name = "Excel名称" ; AbstractSheetWriteHandler handler = new OrdeHandler(); //编码 防止中文乱码 String fileName = URLEncoder.encode(StrUtil.isNotBlank(name) ? name : "下载", StandardCharsets.UTF_8.name());

这些都是导出的基础代码拿来直接用就行,OrdeHandler()如果有什么需求比如说表头下拉那些可以在里面进行配置,没得话直接重写下面的代码。

@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
​
}
​
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
​
}

Content-disposition以什么方式下载,attachment就是附件的形式,后面的是文件名跟文件类型。

先把需要写入Excel的数据查出来,有些数字需要转换成中文的代码我放在resetWorkOrderExcel方法里面了,可以根据自己的需求进行编写。

后面的就是写入Excel,ExcelWorkOrdeStyleUtil这个工具类是Excel的样式。

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值