1定义个要导出的VO
@Data
@Schema(title = "ExcelVO")
public class ExcelVO {
@ExcelProperty(value = "名称",index = 0)
private String name;
@ExcelProperty(value = "类型",index = 1)
private String typeName;
@Schema(title = "编号")
@ExcelProperty(value = "编号",index = 5)
private String cardNo;
}
2.导出的util
@Slf4j
public class EasyExcelUtil extends AbstractColumnWidthStyleStrategy {
private Map<Integer, Map<Integer, Integer>> CACHE = new HashMap<>();
@Override
protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
if (needSetWidth) {
Map<Integer, Integer> maxColumnWidthMap = CACHE.get(writeSheetHolder.getSheetNo());
if (maxColumnWidthMap == null) {
maxColumnWidthMap = new HashMap<>();
CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
}
Integer columnWidth = this.dataLength(cellDataList, cell, isHead);
if (columnWidth >= 0) {
if (columnWidth > 255) {
columnWidth = 255;
}
Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());
if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);
writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);
}
}
}
}
private Integer dataLength(List<CellData> cellDataList, Cell cell, Boolean isHead) {
if (isHead) {
return cell.getStringCellValue().getBytes().length;
} else {
CellData cellData = cellDataList.get(0);
CellDataTypeEnum type = cellData.getType();
if (type == null) {
return -1;
} else {
switch (type) {
case STRING:
return cellData.getStringValue().getBytes().length;
case BOOLEAN:
return cellData.getBooleanValue().toString().getBytes().length;
case NUMBER:
return cellData.getNumberValue().toString().getBytes().length;
default:
return -1;
}
}
}
}
}
3导出的数据Controller
@GetMapping("/exportExcel")
@Operation(summary = "导出表")
public void exportExcel(HttpServletResponse response) throws IOException {
List<ExcelVO> excelList = service.listExcel();
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename="+new String("信息.xlsx".getBytes("GBK"),"iso8859-1"));
EasyExcel.write(response.getOutputStream(), ExcelVO.class)
.head(ExcelVO.class).registerWriteHandler(new EasyExcelUtil())
.sheet("信息").doWrite(excelList);
}