EasyExcel将数据下载到浏览器-超强实用版

pom引入esayxxcel

  
            com.alibaba
            easyexcel
            2.1.6
        

定义实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class BillDTO {

    @ExcelProperty(value = "消费时间",index = 0 )
    private String consumeTime ;
    @ExcelProperty(value = "交易类型",index = 1 )
    private Integer consumeType ;
    @ExcelProperty(value = "产品类型",index = 2 )
    private String apiDesc ;
    @ExcelProperty(value = "描述内容",index = 3 )
    private String describe;
    @ExcelProperty(value = "支出(元)",index = 4 )
    private Double consumeAmount ;
    @ExcelProperty(value = "调用次数",index = 5 )
    private Integer consumeAmt ;

}

控制层

    /*
     *数据费用中心--账单下载
     * */
    @RequestMapping(value = "download/bill", method = RequestMethod.GET)
    public Object billDownload(BillDownloadParam billDownloadParam, HttpServletResponse httpServletResponse) {
        try {
            List<BillDTO> billDTOS=JSON.parseArray(billDownloadParam.getBillContent(), BillDTO.class);
            creditService.downloadBillExcel(httpServletResponse,billDTOS);
            return ResultUtil.getSuccessResult("数据服务消费记录下载成功", null);
        } catch (Exception e) {
            log.error("账单下载异常", e);
            return ResultUtil.getFailedResult(ErrorMessage.INTERNAL_SERVER, null);
        }
    }

服务层

    //数据费用中心--账单下载
    public void downloadExcel(HttpServletResponse response, List dataList, Class cls, String fileName)
            throws IOException {
        response.setContentType("application/vnd.ms-excel");
        //response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-disposition",
                "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode(fileName, "UTF-8") + ".xls");
        LongestMatchColumnWidthStyleStrategy longestMatchColumnWidthStyleStrategy =
                new LongestMatchColumnWidthStyleStrategy();
        EasyExcel.write(response.getOutputStream(), cls)
                .excelType(ExcelTypeEnum.XLS)
                .sheet("sheet1")
                .registerWriteHandler(longestMatchColumnWidthStyleStrategy)
                .doWrite(dataList);
    }

血泪经验:

对应xls:

response.setContentType("application/vnd.ms-excel")

对应xlsx:

response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

另外作者不知道为什么下载xlsx文件总是报文件格式损坏,扩展名不正确的错误,但是用指定xls格式就可以正常下载,值得说的是要想指定xls格式一共要在三个地方声明分别是:

response.setContentType("application/vnd.ms-excel")
 response.setHeader("Content-disposition",
                "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode(fileName, "UTF-8") + ".xls");
 EasyExcel.write(response.getOutputStream(), cls)
                .excelType(ExcelTypeEnum.XLS)
                .sheet("sheet1")
                .registerWriteHandler(longestMatchColumnWidthStyleStrategy)
                .doWrite(dataList);

少一个地方都不行

你可能感兴趣的:(java)