1.接口层
@ApiOperation("其他费用配置-模版下载")
@GetMapping("/downloadTemplate")
public void downloadTemplate(HttpServletResponse response) {
try {
List<String> list = Arrays.asList("集团", "平台", "部门", "店铺", "年月", "币别", "费用项目", "金额",
"分摊类型", "分摊依据", "订单号", "备注"
);
ExcelUtils.exportTemplate(response, ExcelUtils.getSimpleHead(list), new SheetWriteHandler() {
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
String[] expenseItem = new String[]{"退款", "库存损益", "库存清理", "商品成本", "平台费", "收款费用", "物流成本", "包材费", "资金成本", "营销费",
"刊登费", "vat费", "炒分", "云主机及vps", "vps及其他", "固定服务费分摊", "GBC罚款", "销毁成本", "其他款项", "罚款或暂扣货款金额", "收款费及其他", "服务费"};
String[] shareType = new String[]{"店铺承担", "部门承担", "集团承担", "平台承担", "公司承担"};
String[] shareGist = new String[]{"总收入", "商品成本", "计算重量", "订单系数", "订单量"};
Map<Integer, String[]> mapDropDown = new HashMap<>();
mapDropDown.put(6, expenseItem);
mapDropDown.put(8, shareType);
mapDropDown.put(9, shareGist);
ExcelUtils.sheetConfig(writeSheetHolder, mapDropDown);
}
}, "其他费用配置", "其他费用配置");
} catch (IOException e) {
e.printStackTrace();
}
}
2.ExcelUtils
public static <T> void exportTemplate(HttpServletResponse response, List<List<String>> head, SheetWriteHandler handler, String fileName, String sheetName) throws IOException {
try {
setDownloadResponse(response, fileName);
EasyExcel.write(response.getOutputStream()).head(head).autoCloseStream(Boolean.FALSE).sheet(sheetName).registerWriteHandler(handler)
.doWrite(new ArrayList<>());
} catch (Exception e) {
returnErrorMessage(response, e);
}
}
public static void setDownloadResponse(HttpServletResponse response, String fileName) throws Exception {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + URLEncoder.encode(fileName + ExcelTypeEnum.XLSX.getValue(), StandardCharsets.UTF_8.name()));
}
private static void returnErrorMessage(HttpServletResponse response, Exception exception) throws IOException {
response.reset();
response.setContentType("application/json");
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
Map<String, String> map = new HashMap<>();
map.put("status", "failure");
map.put("message", "下载文件失败" + exception.getMessage());
response.getWriter().println(JSON.toJSONString(map));
}
public static void sheetConfig(WriteSheetHolder writeSheetHolder, Map<Integer, String[]> mapDropDown) {
Sheet sheet = writeSheetHolder.getSheet();
DataValidationHelper helper = sheet.getDataValidationHelper();
for (Map.Entry<Integer, String[]> entry : mapDropDown.entrySet()) {
CellRangeAddressList addressList = new CellRangeAddressList(1, 1000, entry.getKey(), entry.getKey());
DataValidationConstraint constraint = helper.createExplicitListConstraint(entry.getValue());
DataValidation dataValidation = helper.createValidation(constraint, addressList);
if (dataValidation instanceof XSSFDataValidation) {
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setShowErrorBox(true);
} else {
dataValidation.setSuppressDropDownArrow(false);
}
sheet.addValidationData(dataValidation);
}
}
实现效果