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.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import javax.annotation.PostConstruct; 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; @Component public class EasyPoiUtils { /*@Autowired IExportLogService exportLogService;*/ private static EasyPoiUtils EasyPoiUtils; @PostConstruct public void init() { EasyPoiUtils = this; } public static void sellerExportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, HttpServletResponse response) { defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName)); } /** * 功能描述:復雜導出Excel,包括文件名以及表名。創建表頭 * * @param list 導出的實體類 * @param title 表頭名稱 * @param sheetName sheet表名 * @param pojoClass 映射的實體類 * @param isCreateHeader 是否創建表頭 * @param fileName * @param response * @return */ 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 */ /* public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, HttpServletResponse response,Integer userMasterId) { defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName)); //導出日志 ExportLogVO exportLogVO = new ExportLogVO(); exportLogVO.setUserMasterId(userMasterId); exportLogVO.setCreateTime(new Date()); exportLogVO.setExportTypeName(title); exportLogVO.setFileName(fileName); EasyPoiUtils.exportLogService.insert(exportLogVO); }*/ /** * 功能描述:Map 集合導出 * * @param list 實體集合 * @param fileName 導出的文件名稱 * @param response * @return */ 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 */ 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 */ 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 */ 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 */ 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 */ 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) { throw new RuntimeException(e.getMessage()); } return list; } } /* try { List<SellerVO> sellerVOList = sellerService.easyPoiExport(map); String typeName = "全部商家"; String fileName = typeName + "-" + new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + ".xls"; EasyPoiUtils.exportExcel(sellerVOList, "全部商家", typeName, SellerVO.class, fileName, response, userMasterVO.getId()); } catch (Exception e) { e.printStackTrace(); return StringUtil.getReturnMsg(false, "導出失敗"); } return StringUtil.getReturnMsg(true, "導出成功");*/