1.前言
2.实例一
2.1需求
一个对象直接导出成一个Excel表格
①导出的对象
@Datapublic class PersonExportVo implements Serializable {private Integer id;private String name;private Date birth;}
②想导出的表格
2.2实现
①导出对象加入注解
@Datapublic class PersonExportVo implements Serializable {@Excel(name = "编号")private Integer id;@Excel(name = "姓名")private String name;@Excel(name = "出生日期")private Date birth;}
②工具类(网上搜的,下面的都使用这个工具类)
package com.gao.booteasypoi.utils;import cn.afterturn.easypoi.excel.ExcelExportUtil;import cn.afterturn.easypoi.excel.ExcelImportUtil;import cn.afterturn.easypoi.excel.entity.ExportParams;import cn.afterturn.easypoi.excel.entity.ImportParams;import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;import org.apache.commons.lang3.StringUtils;import org.apache.poi.ss.usermodel.Workbook;import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.net.URLEncoder;import java.util.List;import java.util.Map;import java.util.NoSuchElementException;public class ExcelUtils {/*** excel 导出** @param list 数据* @param title 标题* @param sheetName sheet名称* @param pojoClass pojo类型* @param fileName 文件名称* @param isCreateHeader 是否创建表头* @param response*/public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response) throws IOException {ExportParams exportParams = new ExportParams(title, sheetName, ExcelType.XSSF);exportParams.setCreateHeadRows(isCreateHeader);defaultExport(list, pojoClass, fileName, response, exportParams);}/*** excel 导出** @param list 数据* @param title 标题* @param sheetName sheet名称* @param pojoClass pojo类型* @param fileName 文件名称* @param response*/public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, HttpServletResponse response) throws IOException {defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName, ExcelType.XSSF));}/*** excel 导出** @param list 数据* @param pojoClass pojo类型* @param fileName 文件名称* @param response* @param exportParams 导出参数*/public static void exportExcel(List<?> list, Class<?> pojoClass, String fileName, ExportParams exportParams, HttpServletResponse response) throws IOException {defaultExport(list, pojoClass, fileName, response, exportParams);}/*** excel 导出** @param list 数据* @param fileName 文件名称* @param response*/public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response) throws IOException {defaultExport(list, fileName, response);}/*** 默认的 excel 导出** @param list 数据* @param pojoClass pojo类型* @param fileName 文件名称* @param response* @param exportParams 导出参数*/private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) throws IOException {Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);downLoadExcel(fileName, response, workbook);}/*** 默认的 excel 导出** @param list 数据* @param fileName 文件名称* @param response*/private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) throws IOException {Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);downLoadExcel(fileName, response, workbook);}/*** 下载** @param fileName 文件名称* @param response* @param workbook excel数据*/private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) throws IOException {try {response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + "." + ExcelTypeEnum.XLSX.getValue(), "UTF-8"));workbook.write(response.getOutputStream());} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** @param filePath excel文件路径* @param titleRows 标题行* @param headerRows 表头行* @param pojoClass pojo类型* @param <T>* @return*/public static <T> List<T> importExcel(String filePath, Integer titleRows, Integer headerRows, Class<T> pojoClass) throws IOException {if (StringUtils.isBlank(filePath)) {return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);params.setNeedSave(true);params.setSaveUrl("/excel/");try {return ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);} catch (NoSuchElementException e) {throw new IOException("模板不能为空");} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** @param file excel文件* @param pojoClass pojo类型* @param <T>* @return*/public static <T> List<T> importExcel(MultipartFile file, Class<T> pojoClass) throws IOException {return importExcel(file, 1, 1, pojoClass);}/*** excel 导入** @param file excel文件* @param titleRows 标题行* @param headerRows 表头行* @param pojoClass pojo类型* @param <T>* @return*/public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass) throws IOException {return importExcel(file, titleRows, headerRows, false, pojoClass);}/*** excel 导入** @param file 上传的文件* @param titleRows 标题行* @param headerRows 表头行* @param needVerfiy 是否检验excel内容* @param pojoClass pojo类型* @param <T>* @return*/public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, boolean needVerfiy, Class<T> pojoClass) throws IOException {if (file == null) {return null;}try {return importExcel(file.getInputStream(), titleRows, headerRows, needVerfiy, pojoClass);} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** @param inputStream 文件输入流* @param titleRows 标题行* @param headerRows 表头行* @param needVerfiy 是否检验excel内容* @param pojoClass pojo类型* @param <T>* @return*/public static <T> List<T> importExcel(InputStream inputStream, Integer titleRows, Integer headerRows, boolean needVerfiy, Class<T> pojoClass) throws IOException {if (inputStream == null) {return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);params.setSaveUrl("/excel/");params.setNeedSave(true);params.setNeedVerfiy(needVerfiy);try {return ExcelImportUtil.importExcel(inputStream, pojoClass, params);} catch (NoSuchElementException e) {throw new IOException("excel文件不能为空");} catch (Exception e) {throw new IOException(e.getMessage());}}/*** Excel 类型枚举*/enum ExcelTypeEnum {XLS("xls"), XLSX("xlsx");private String value;ExcelTypeEnum(String value) {this.value = value;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}}}
③Controller层代码
@GetMapping(value = "/export")public void exportExcel(HttpServletResponse response) {//初始化数据List<PersonExportVo> personList = new ArrayList<>();for (int i = 0; i < 5; i++) {PersonExportVo personVo = new PersonExportVo();personVo.setName("张三" + i);personVo.setId(i);personVo.setBirth(new Date());personList.add(personVo);}try {ExcelUtils.exportExcel(personList, "员工信息表", "员工信息", PersonExportVo.class, "员工信息", response);} catch (IOException e) {e.printStackTrace();}}
3.实例二(日期格式化)
3.1需求
3.2代码
@Datapublic class PersonExportVo implements Serializable {@Excel(name = "编号")private Integer id;@Excel(name = "姓名")private String name;@Excel(name = "出生日期",format = "yyyy-MM-dd HH:mm:ss")private Date birth;}
3.3扩展
①数字的格式化使用 numformat
②每一列的单元格宽度使用 width设置
4.实例三
4.1需求
①将对象种某个字段不导出
②列顺序排列
③对于一个状态信息,后端只保存1,2,3这样的标识,所以我需要导出对应的 具体状态描述
 ===>
