|
@@ -0,0 +1,324 @@
|
|
|
+package com.jeeplus.human.enrollment.enrollmentRegistration.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 com.jeeplus.pubmodules.holiday.utils.ExcelDiceAddressListHandlerImpl;
|
|
|
+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.net.URLEncoder;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.NoSuchElementException;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @Author Steel.D
|
|
|
+ * @Description easypoi导入导出通用工具类
|
|
|
+ * @Date 2019-7-31 9:29
|
|
|
+ * @Param
|
|
|
+ * @return
|
|
|
+ **/
|
|
|
+
|
|
|
+public class EasyPoiUtil {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 功能描述:复杂导出Excel,包括文件名以及表名。创建表头
|
|
|
+ *
|
|
|
+ * @param list 导出的实体类
|
|
|
+ * @param title 表头名称
|
|
|
+ * @param sheetName sheet表名
|
|
|
+ * @param pojoClass 映射的实体类
|
|
|
+ * @param isCreateHeader 是否创建表头
|
|
|
+ * @param fileName
|
|
|
+ * @param response
|
|
|
+ * @return
|
|
|
+ * @author Steel.D
|
|
|
+ * @Date 2019-7-31 9:30
|
|
|
+ */
|
|
|
+
|
|
|
+ public static void exportExcel(List <?> list, String title, String sheetName, Class <?> pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response) {
|
|
|
+
|
|
|
+ ExportParams exportParams = new ExportParams( title, sheetName );
|
|
|
+
|
|
|
+ exportParams.setCreateHeadRows ( isCreateHeader );
|
|
|
+
|
|
|
+ defaultExport ( list, pojoClass, fileName, response, exportParams );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 功能描述:复杂导出Excel,包括文件名以及表名,不创建表头
|
|
|
+ *
|
|
|
+ * @param list 导出的实体类
|
|
|
+ * @param title 表头名称
|
|
|
+ * @param sheetName sheet表名
|
|
|
+ * @param pojoClass 映射的实体类
|
|
|
+ * @param fileName 文件名
|
|
|
+ * @param response
|
|
|
+ * @return
|
|
|
+ * @author Steel.D
|
|
|
+ * @Date 2019-7-31 9:35
|
|
|
+ */
|
|
|
+
|
|
|
+ public static void exportExcel(List <?> list, String title, String sheetName, Class <?> pojoClass, String fileName, HttpServletResponse response) {
|
|
|
+ ExportParams exportParams = new ExportParams(title, sheetName);
|
|
|
+ exportParams.setDictHandler(new ExcelDiceAddressListHandlerImpl());
|
|
|
+ defaultExport ( list, pojoClass, fileName, response, exportParams );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 功能描述:Map 集合导出
|
|
|
+ *
|
|
|
+ * @param list 实体集合
|
|
|
+ * @param fileName 导出的文件名称
|
|
|
+ * @param response
|
|
|
+ * @return
|
|
|
+ * @author Steel.D
|
|
|
+ * @Date 2019-7-31 9:45
|
|
|
+ */
|
|
|
+
|
|
|
+ public static void exportExcel(List <Map <String, Object>> list, String fileName, HttpServletResponse response) {
|
|
|
+
|
|
|
+ defaultExport ( list, fileName, response );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 功能描述:默认导出方法
|
|
|
+ *
|
|
|
+ * @param list 导出的实体集合
|
|
|
+ * @param fileName 导出的文件名
|
|
|
+ * @param pojoClass pojo实体
|
|
|
+ * @param exportParams ExportParams封装实体
|
|
|
+ * @param response
|
|
|
+ * @return
|
|
|
+ * @author Steel.D
|
|
|
+ * @Date 2019-7-31 9:50
|
|
|
+ */
|
|
|
+
|
|
|
+ private static void defaultExport(List <?> list, Class <?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) {
|
|
|
+
|
|
|
+ Workbook workbook = ExcelExportUtil.exportExcel ( exportParams, pojoClass, list );
|
|
|
+
|
|
|
+ if ( workbook != null ) {
|
|
|
+
|
|
|
+ downLoadExcel ( fileName, response, workbook );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 功能描述:Excel导出
|
|
|
+ *
|
|
|
+ * @param fileName 文件名称
|
|
|
+ * @param response
|
|
|
+ * @param workbook Excel对象
|
|
|
+ * @return
|
|
|
+ * @author Steel.D
|
|
|
+ * @Date 2019-7-31 10:35
|
|
|
+ */
|
|
|
+
|
|
|
+ private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ response.setCharacterEncoding ( "UTF-8" );
|
|
|
+
|
|
|
+ response.setHeader ( "content-Type", "application/vnd.ms-excel" );
|
|
|
+
|
|
|
+ response.setHeader ( "Content-Disposition", "attachment;filename=" + URLEncoder.encode ( fileName, "UTF-8" ) );
|
|
|
+
|
|
|
+ workbook.write ( response.getOutputStream ( ) );
|
|
|
+
|
|
|
+ } catch (IOException e) {
|
|
|
+
|
|
|
+ throw new RuntimeException ( e );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 功能描述:默认导出方法
|
|
|
+ *
|
|
|
+ * @param list 导出的实体集合
|
|
|
+ * @param fileName 导出的文件名
|
|
|
+ * @param response
|
|
|
+ * @return
|
|
|
+ * @author SteeL.D
|
|
|
+ * @Date 2019-7-31 10:45
|
|
|
+ */
|
|
|
+
|
|
|
+ private static void defaultExport(List <Map <String, Object>> list, String fileName, HttpServletResponse response) {
|
|
|
+
|
|
|
+ Workbook workbook = ExcelExportUtil.exportExcel ( list, ExcelType.HSSF );
|
|
|
+
|
|
|
+ if ( workbook != null ) ;
|
|
|
+
|
|
|
+ downLoadExcel ( fileName, response, workbook );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 功能描述:根据文件路径来导入Excel
|
|
|
+ *
|
|
|
+ * @param filePath 文件路径
|
|
|
+ * @param titleRows 表标题的行数
|
|
|
+ * @param headerRows 表头行数
|
|
|
+ * @param pojoClass Excel实体类
|
|
|
+ * @return
|
|
|
+ * @author Steel.D
|
|
|
+ * @Date 2019-7-31 11:05
|
|
|
+ */
|
|
|
+
|
|
|
+ public static <T> List <T> importExcel(String filePath, Integer titleRows, Integer headerRows, Class <T> pojoClass) {
|
|
|
+
|
|
|
+ //判断文件是否存在
|
|
|
+
|
|
|
+ if ( StringUtils.isBlank ( filePath ) ) {
|
|
|
+
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ ImportParams params = new ImportParams( );
|
|
|
+
|
|
|
+ params.setTitleRows ( titleRows );
|
|
|
+
|
|
|
+ params.setHeadRows ( headerRows );
|
|
|
+
|
|
|
+ List <T> list = null;
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ list = ExcelImportUtil.importExcel ( new File ( filePath ), pojoClass, params );
|
|
|
+
|
|
|
+ } catch (NoSuchElementException e) {
|
|
|
+
|
|
|
+ throw new RuntimeException ( "模板不能为空" );
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+
|
|
|
+ e.printStackTrace ( );
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 功能描述:根据接收的Excel文件来导入Excel,并封装成实体类
|
|
|
+ *
|
|
|
+ * @param file 上传的文件
|
|
|
+ * @param titleRows 表标题的行数
|
|
|
+ * @param headerRows 表头行数
|
|
|
+ * @param pojoClass Excel实体类
|
|
|
+ * @return
|
|
|
+ * @author Steel.D
|
|
|
+ * @Date 2019-7-31 11:30
|
|
|
+ */
|
|
|
+
|
|
|
+ public static <T> List <T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class <T> pojoClass) {
|
|
|
+
|
|
|
+ if ( file == null ) {
|
|
|
+
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ ImportParams params = new ImportParams( );
|
|
|
+
|
|
|
+ params.setTitleRows ( titleRows );
|
|
|
+
|
|
|
+ params.setHeadRows ( headerRows );
|
|
|
+
|
|
|
+ List <T> list = null;
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ list = ExcelImportUtil.importExcel ( file.getInputStream ( ), pojoClass, params );
|
|
|
+
|
|
|
+ } catch (NoSuchElementException e) {
|
|
|
+
|
|
|
+ throw new RuntimeException ( "excel文件不能为空" );
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace ();
|
|
|
+ throw new RuntimeException ( e.getMessage ( ) );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 功能描述:根据接收的Excel文件来导入Excel,并封装成实体类
|
|
|
+ *
|
|
|
+ * @param file 上传的文件
|
|
|
+ * @param titleRows 表标题的行数
|
|
|
+ * @param headerRows 表头行数
|
|
|
+ * @param sheetNum 开始sheet页
|
|
|
+ * @param sheetNum sheet页数
|
|
|
+ * @param pojoClass Excel实体类
|
|
|
+ * @return
|
|
|
+ * @author Steel.D
|
|
|
+ * @Date 2019-7-31 11:30
|
|
|
+ */
|
|
|
+ public static <T> List <T> importSheetExcel(MultipartFile file, Integer titleRows, Integer headerRows, Integer startSheetIndex, Integer sheetNum, Class <T> pojoClass) {
|
|
|
+
|
|
|
+ if ( file == null ) {
|
|
|
+
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ ImportParams params = new ImportParams( );
|
|
|
+
|
|
|
+ params.setTitleRows ( titleRows );
|
|
|
+
|
|
|
+ params.setHeadRows ( headerRows );
|
|
|
+
|
|
|
+ params.setStartSheetIndex(startSheetIndex);
|
|
|
+
|
|
|
+ params.setSheetNum(sheetNum);
|
|
|
+
|
|
|
+ List <T> list = null;
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ list = ExcelImportUtil.importExcel ( file.getInputStream ( ), pojoClass, params );
|
|
|
+
|
|
|
+ } catch (NoSuchElementException e) {
|
|
|
+
|
|
|
+ throw new RuntimeException ( "excel文件不能为空" );
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace ();
|
|
|
+ throw new RuntimeException ( e.getMessage ( ) );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|