效果
引入pom依赖
<!--导入导出excel-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
Controller层接口代码
@ApiOperation("下载模板")
@GetMapping("/downloadTemplate")
public void downloadTemplate(HttpServletResponse response) {
try {
List<String> selects= new ArrayList<>();
List<List<String>> datas = new ArrayList<>();
HSSFWorkbook wb = checkDownloadExcel.setExcelData("2022-10",selects,datas);
OutputStream output = null;
String fileName = "文件名.xls";
fileName = URLEncoder.encode(fileName, "UTF-8");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ";" + "filename*=utf-8''" + fileName);
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
output = response.getOutputStream();
wb.write(output);
output.flush();
output.close();
wb.close();
} catch (Exception e) {
e.printStackTrace();
}
}
checkDownloadExcel工具类
public HSSFWorkbook setExcelData(String dateTime, List<String> selectList, List<List<String>> dataList) {
List<String> headerList = new ArrayList();
headerList.add("序号");
headerList.add("姓名");
headerList.add("手机号");
headerList.add("部门");
List<String> months = DateTimeUtils.getDayByMonth(Integer.valueOf(dateTime.substring(0, dateTime.indexOf("-"))), Integer.valueOf(dateTime.substring(dateTime.indexOf("-") + 1, dateTime.length())));
for (String day : months) {
headerList.add(day.substring(day.lastIndexOf("-") + 1, day.length()) + "日/" + DateTimeUtils.dateToWeek(day));
}
String[] headers = headerList.toArray(new String[headerList.size()]);
String[] selects = selectList.toArray(new String[selectList.size()]);
return setExcelStyle(headers, selects, dataList, dateTime);
}
public HSSFWorkbook setExcelStyle(String[] headers, String[] selects, List<List<String>> datas, String date) {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("排版设置");
HSSFCellStyle titleStyle = wb.createCellStyle();
titleStyle.setAlignment(HorizontalAlignment.CENTER);
titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
Font titleFont = wb.createFont();
titleFont.setFontHeightInPoints((short) 15);
titleFont.setFontName("黑体");
titleStyle.setFont(titleFont);
HSSFCellStyle headerStyle = wb.createCellStyle();
headerStyle.setAlignment(HorizontalAlignment.CENTER);
headerStyle.setBorderBottom(BorderStyle.THIN);
headerStyle.setBorderLeft(BorderStyle.THIN);
headerStyle.setBorderRight(BorderStyle.THIN);
headerStyle.setBorderTop(BorderStyle.THIN);
Font headerFont = wb.createFont();
headerFont.setFontHeightInPoints((short) 12);
headerFont.setFontName("黑体");
headerStyle.setFont(headerFont);
CellRangeAddress rangeAddress = new CellRangeAddress(0, 0, 0, headers.length - 1);
sheet.addMergedRegion(rangeAddress);
HSSFRow row0 = sheet.createRow((int) 0);
row0.setHeightInPoints(40);
HSSFCell cell0 = row0.createCell(0);
String year = date.substring(0, date.indexOf("-"));
String month = date.substring(date.indexOf("-") + 1);
cell0.setCellValue("出勤情况统计表(" + year + "年" + month + "月)");
cell0.setCellStyle(titleStyle);
HSSFRow row = sheet.createRow((int) 1);
for (int j = 0; j < headers.length; j++) {
HSSFCell cell = row.createCell(j);
cell.setCellValue(headers[j]);
cell.setCellStyle(headerStyle);
}
HSSFCellStyle dataStyle = wb.createCellStyle();
dataStyle.setAlignment(HorizontalAlignment.CENTER);
int index = 2;
for (int i = 0; i < datas.size(); i++) {
row = sheet.createRow(index);
index++;
List<String> data = datas.get(i);
for (int j = 0; j < data.size(); j++) {
Cell cell = row.createCell(j);
cell.setCellValue(data.get(j));
cell.setCellStyle(dataStyle);
}
}
if(datas.size() == 0){
setHSSFValidation(sheet, selects, 2, 100, 4, headers.length - 1);
}else{
setHSSFValidation(sheet, selects, 2, datas.size()+1, 4, headers.length - 1);
}
return wb;
}
private HSSFSheet setHSSFValidation(HSSFSheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol) {
HSSFWorkbook workbook = sheet.getWorkbook();
Sheet hidden = workbook.createSheet("hidden");
Cell cell = null;
for (int i = 0, length = textlist.length; i < length; i++) {
String name = textlist[i];
Row roww = hidden.createRow(i);
cell = roww.createCell(0);
cell.setCellValue(name);
}
Name namedCell = workbook.createName();
namedCell.setNameName("hidden");
namedCell.setRefersToFormula("hidden!$A$1:$A$" + textlist.length);
workbook.setSheetHidden(1, true);
DVConstraint constraint = DVConstraint.createFormulaListConstraint("hidden");
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
HSSFDataValidation data_validation_list = new HSSFDataValidation(regions, constraint);
sheet.addValidationData(data_validation_list);
return sheet;
}