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);
少一个地方都不行