spring boot导出excel

需要引入的jar包

 <dependency>
    <groupId>com.github.crab2died</groupId>
    <artifactId>Excel4J</artifactId>
     <version>2.1.4-Final2</version>
</dependency>

构造excel模板

import com.github.crab2died.annotation.ExcelField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;

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


@Setter
@Getter
public class ExportDto implements Serializable {
  
    @ExcelField(title = "标题1", order = 1)
    private String title1;

    @ExcelField(title = "标题2", order = 2)
    private LocalDateTime title2;

    @ExcelField(title = "标题3", order = 3)
    private String title3;

   
}

controller层
 

@GetMapping("/export/file")
    public void exportFile(           
            HttpServletRequest request,
            HttpServletResponse response
    ) throws Exception {
        //设置文件名
        String fileName = new String(("测试文件名_" + DateUtil.getCurrentDate("yyyyMMddHHmmss")).getBytes(), "UTF-8");
        fileName = UrlEncodingUtils.fileNameEncoding(fileName, request);
        response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xlsx");
        OutputStream outputStream = response.getOutputStream();

        testService.exportFile(outputStream);
    }

service层

 @Override
    public void exportFile(OutputStream outputStream) {
       
        try {
            //获取数据
            List<ExportDto> exportDtoList = testMapper.findAll();

            //组装excel
            ExcelUtils.getInstance().exportObjects2Excel(exportDtoList , ExportDto.class, true, "sheet名", true, outputStream);
          
        } catch (Excel4JException | IOException e) {
            log.error("导出失败", e.getMessage());
        }
    }

防止文件名乱码,做的处理工具

import sun.misc.BASE64Encoder;

import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class UrlEncodingUtils {

    private static final String BROWSER_TYPE_IE = "MSIE";
    private static final String BROWSER_TYPE_FIREFOX = "Firefox";

    /**
     * 根据不同浏览器设置文件名编码
     *
     * @param fileName
     * @param request
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String fileNameEncoding(String fileName, HttpServletRequest request) throws UnsupportedEncodingException {
        // 获得请求头中的User-Agent
        String agent = request.getHeader("User-Agent");
        // 根据不同的客户端进行不同的编码

        if (agent.contains(BROWSER_TYPE_IE)) {
            // IE浏览器
            fileName = URLEncoder.encode(fileName, "UTF-8");
        } else if (agent.contains(BROWSER_TYPE_FIREFOX)) {
            // 火狐浏览器
            BASE64Encoder base64Encoder = new BASE64Encoder();
            fileName = "=?utf-8?B?" + base64Encoder.encode(fileName.getBytes("UTF-8")) + "?=";
        } else {
            // 其它浏览器
            fileName = URLEncoder.encode(fileName, "UTF-8");
        }
        return fileName;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值