easypoi,主打的功能就是容易,通过简单的配置,就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出
pom导入依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.2.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>
pojo
模拟数据库的表字段
@Excel注解:
name:对应生成excel中的字段标题
orderNum:默认从0开始,按照顺序依次排序
width:设置生成字段的宽度
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {@Excel(name = "姓名",orderNum = "0",width = 15)private String name;@Excel(name = "电话",orderNum = "1",width = 15)private String phone;@Excel(name = "性别",orderNum = "2",width = 15)private String gender;}
util
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);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
手动模拟输入数据
@RestController
public class ExportExcelController {@GetMapping(value = "/export")public void exportExcel(HttpServletResponse response) throws IOException {List<User> personList = new ArrayList<>();User user = new User("tom","1223132","男");User user1 = new User("jim","123425534","女");personList.add(user);personList.add(user1);ExcelUtils.exportExcel(personList, "员工信息表", "员工信息", User.class, "员工信息", response);}
}