java实现excel文件导出案例(附ChatGPT解析)

 示例一:

//表头样式
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
//设置表头居中对齐
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
//内容样式
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
//设置内容靠左对齐
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
//设置样式
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);

String fileName = "模型命令_" + DateTimeFormatter.ofPattern("yyyyMMddHHmmss").format(LocalDateTime.now());

response.setContentType("application/msexcel");
fileName = URLEncoder.encode(fileName, CharsetNames.UTF_8) + ".xlsx";
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileName);

EasyExcel.write(response.getOutputStream(), CommandExcelVO.class)
    .excelType(ExcelTypeEnum.XLSX)
    .sheet("命令")
    .registerWriteHandler(horizontalCellStyleStrategy)
    .doWrite(excelList);

 示例二:

@ApiOperation("导出")
@PostMapping("/export")
public void export(@RequestBody MonitorLogParam param, HttpServletResponse response) throws Exception {
    List<IotMonitorLog> list = this.monitorLogService.selectList(param);
    //表头样式
    WriteCellStyle headWriteCellStyle = new WriteCellStyle();
    //设置表头居中对齐
    headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
    //内容样式
    WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
    //设置内容靠左对齐
    contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
    String fileName = "xxx" + DateUtil.format(new Date(), "yyyyMMddHHmmss");
    HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
    EasyExcel.write(getOutputStream(fileName, response), MonitorLogExcelVo.class)
        .excelType(ExcelTypeEnum.XLS).sheet("xxx").registerWriteHandler(horizontalCellStyleStrategy)
        .doWrite(packageExcelVo(list));

    return;
}


/**
 * 表对象封装成excel对象
 * @param list
 * @return
 */
private List<MonitorLogExcelVo> packageExcelVo(List<IotMonitorLog> list) {
    if (Objects.isNull(list) || list.isEmpty()){
        return Collections.emptyList();
    }
    return list.stream().map(record ->{
        return MonitorLogExcelVo.builder().monitorType(record.getMonitorType())
            .claimantName(record.getClaimantName()).name(record.getName())
            .claimStatus(record.getClaimStatus()).claimTime(record.getClaimTime())
            .createTime(record.getCreateTime()).describe(record.getDescribe())
            .build();
    }).collect(Collectors.toList());
}

private OutputStream getOutputStream(String fileName, HttpServletResponse response) throws Exception {
    response.setContentType("application/msexcel");
    response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes(CharsetNames.UTF_8), "iso8859-1") + ".xls");
    return response.getOutputStream();
}

ExcelVO中注解示例:

public class MonitorLogExcelVo {
    
    @ExcelProperty(value = "名称", index = 1)
    @ColumnWidth(20)
    private String name;
    
    @ExcelProperty(value = "监控类型", index = 2, converter = MonitorTypeConverter.class)
    @ColumnWidth(25)
    private String monitorType;

    @ExcelProperty(value = "描述", index = 3)
    @ColumnWidth(40)
    private String describe;
}

示例二ChatGPT解析:

这段代码使用了 EasyExcel 库,用于将数据写入 Excel 文件中。

首先,定义了一个文件名 `fileName`,格式为 "xxx_当前时间",其中 `DateUtil.format(new Date(), "yyyyMMddHHmmss")` 用于将当前时间格式化为字符串。

接着,定义了一个 `HorizontalCellStyleStrategy` 对象 `horizontalCellStyleStrategy`,用于设置 Excel 表头和内容的样式。

然后,使用 `EasyExcel.write()` 方法创建一个 Excel 写入器,并指定输出流和数据类型(这里使用的是 XLS 格式),并指定工作表名称为 "监控异常记录"。

接下来,注册了一个写入处理器 `horizontalCellStyleStrategy`,用于设置表头和内容的样式。

最后,调用 `doWrite()` 方法将数据写入 Excel 文件中,其中 `packageExcelVo(list)` 用于将数据转换为 `MonitorLogExcelVo` 类型的列表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值