引入依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
编写pojo类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private String sno;
private String name;
private Integer age;
private String gender;
private String nativePlace;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date enrollmentTime;
private BigDecimal money;
}
编写实现类
@PostMapping("user_export_excel")
@ResponseBody
public void exportExcel(HttpServletResponse response) throws UnsupportedEncodingException, ParseException {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition",
"attachment;filename*=utf-8''" + URLEncoder.encode("学生花名册", "UTF-8") + ".xlsx");
List<Student> studentList = new ArrayList<Student>() {
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
add(new Student("1001", "张三", 23, "男", "陕西西安", dateFormat.parse("2020-09-01"), BigDecimal.valueOf(22.33)));
add(new Student("1002", "李四", 22, "女", "陕西渭南", dateFormat.parse("2020-09-01"),BigDecimal.valueOf(11.99)));
}
};
ExcelWriter writer = ExcelUtil.getWriter();
CellStyle cellStyle1 = writer.createCellStyle();
cellStyle1.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle1.setAlignment(HorizontalAlignment.CENTER);
cellStyle1.setBorderLeft(writer.getCellStyle().getBorderLeft());
cellStyle1.setBorderRight(writer.getCellStyle().getBorderRight());
cellStyle1.setBorderBottom(writer.getCellStyle().getBorderBottom());
Font font = writer.createFont();
font.setBold(true);
font.setFontHeightInPoints((short) 12);
font.setFontName("微软雅黑");
cellStyle1.setFont(font);
CellStyle cellStyle = writer.createCellStyle();
cellStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.GOLD.getIndex());
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setAlignment(HorizontalAlignment.LEFT);
cellStyle.setBorderRight(writer.getCellStyle().getBorderRight());
cellStyle.setBorderBottom(writer.getCellStyle().getBorderBottom());
writer.merge(0,0,0,11, "BOM报价单", cellStyle1);
writer.merge(1,1,0,3,"您上传的BOM", cellStyle1);
writer.merge(1, 1 ,4,9,"商城报价单", cellStyle1);
writer.merge(1,1,10,11,"总价(含税): "+ " 99.99",cellStyle);
writer.passRows(2);
writer.setRowHeight(0, 50);
writer.setRowHeight(1, 30);
writer.addHeaderAlias("sno", "学号");
writer.addHeaderAlias("name", "姓名");
writer.addHeaderAlias("age", "年龄");
writer.addHeaderAlias("gender", "性别");
writer.addHeaderAlias("nativePlace", "籍贯");
writer.addHeaderAlias("enrollmentTime", "入学时间");
writer.addHeaderAlias("money", "金钱");
writer.setColumnWidth(5, 20);
writer.setColumnWidth(10, 10);
writer.setColumnWidth(11, 10);
CellStyle headCellStyle = writer.getHeadCellStyle();
headCellStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.LIME.getIndex());
headCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
writer.write(studentList, true);
for (int i = 2; i < studentList.size(); i++) {
writer.setRowHeight(i,20);
}
try {
writer.flush(response.getOutputStream(), true);
} catch (IOException e) {
e.printStackTrace();
} finally {
writer.close();
}
}
效果图
参考资料
参考文章一
参考文章二
hutool官方文档