excel和csv文件导出

       这里做一个excel和csv以流的形式导出到客户端的案例,即为可以在postman端直接调用可下载的。这里我用的是第三方依赖是hutool,里面有可直接使用的工具方法。其maven依赖如下:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.3.7</version>
</dependency>

1、Excel

首先是excel,我们一般一行excel是一个对象,那多条数据就是一个集合,先定义一个对象:

package cn.coralglobal.model.vo;

import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * @Description:
 * @Author chenjianwen
 * @Date 2020/8/4
 **/
@Data
public class IncomeExportVo implements Serializable {

    private static final long serialVersionUID = 63572446880062722L;
    /**
     * 创建日期
     */
    private String gmtCreate;
    /**
     * 平台
     */
    private String platform;
    /**
     * 收款账号
     */
    private String foreignBankAccount;
    /**
     * 入账流水号
     */
    private String incomeId;
    /**
     * 入账金额
     */
    private BigDecimal money;
    /**
     * 币种
     */
    private String currency;
    /**
     * 可用余额
     */
    private BigDecimal leftMoney;
}

下面是导出excel接口代码:
 

@PostMapping("/records/income/export")
public HttpServletResponse exportIncomeRecord(HttpServletResponse response) throws IOException {
        List<IncomeExportVo> voList = recordService.incomeExport(ie);
        //定义一个输出对象
        ExcelWriter writer = ExcelUtil.getWriter();
        //设置excel单元格大小
        writer.setColumnWidth(0, 40);
        writer.setColumnWidth(1, 35);
        writer.setColumnWidth(2, 30);
        writer.setColumnWidth(3, 20);
        writer.setColumnWidth(4, 10);
        writer.setColumnWidth(5, 20);
        //writer.setColumnWidth(6, 20);
        writer.setColumnWidth(6, 30);
        //设置excel单元格标题
        writer.merge(6, "入账记录表");
        //填充excel单元格数据
        if(voList != null && voList.size() > 0){
            writer.addHeaderAlias("incomeId", "入账流水号");
            writer.addHeaderAlias("foreignBankAccount", "收款银行账号");
            writer.addHeaderAlias("platform", "平台");
            writer.addHeaderAlias("money", "入账金额");
            writer.addHeaderAlias("currency", "币种");
            writer.addHeaderAlias("leftMoney", "可用余额");
            //writer.addHeaderAlias("status", "状态");
            writer.addHeaderAlias("gmtCreate", "创建日期");
            writer.write(voList, true);
        }else{
            writer.writeCellValue(0, 1, "入账流水号");
            writer.writeCellValue(1, 1, "收款银行账号");
            writer.writeCellValue(2, 1, "平台");
            writer.writeCellValue(3, 1, "入账金额");
            writer.writeCellValue(4, 1, "币种");
            writer.writeCellValue(5, 1, "可用余额");
            writer.writeCellValue(6, 1, "创建日期");
        }
        //定义字体和标题行宽度
        Font font = writer.createFont();
        font.setFontHeight((short) 250);
        writer.getStyleSet().setFont(font, true);
        writer.setRowHeight(0, 20);
        writer.setRowHeight(1, 20);
        //定义response对象
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-Disposition","attachment;filename=incomeRecord.xls");
        ServletOutputStream out = response.getOutputStream();
        writer.flush(out, true);
        writer.close();
        IoUtil.close(out);
        return response;
    }

2、Csv

@RequestMapping("/index")
public HttpServletResponse export(HttpServletResponse response) throws Exception {
        //设置分隔符
        CsvWriteConfig csvWriteConfig = new CsvWriteConfig();
        csvWriteConfig.setFieldSeparator('|');
        //创建csv"写对象"
        CsvWriter writer = new CsvWriter(new OutputStreamWriter(response.getOutputStream(), CharsetUtil.CHARSET_GBK), csvWriteConfig);
        //设置response
        response.setContentType("application/csv;charset=gbk");
        response.setHeader("Content-Disposition", "attachment; filename=exported.csv");
        //将数据写入到csv"写对象"中
        writer.write(
                new String[] {"a1", "b1", "c1"},
                new String[] {"a2", "b2", "c2"},
                new String[] {"a3", "b3", "c3"}
        );
        return response;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值