原文:https://www.jianshu.com/p/5d67fb720ece
开发中经常会遇到excel的处理,导入导出解析等等,java中比较流行的用poi,但是每次都要写大段工具类来搞定这事儿,此处推荐一个别人造好的轮子【easypoi】,下面介绍下“轮子”的使用。pom引入 不再需要其他jar <dependency><groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-annotation</artifactId> <version>3.0.3</version> </dependency> 编写实体类 此处注意必须要有空构造函数,否则会报错“对象创建错误”关于注解@Excel,其他还有@ExcelCollection,@ExcelEntity ,@ExcelIgnore,@ExcelTarget等,此处我们用不到,可以去官方查看更多属性类型类型说明nameStringnull列名needMergebooleanfasle纵向合并单元格orderNumString"0"列的排序,支持name_idreplaceString[]{}值得替换 导出是{a_id,b_id} 导入反过来savePathString"upload"导入文件保存路径typeint1导出类型 1 是文本 2 是图片,3 是函数,10 是数字 默认是文本widthdouble10列宽heightdouble10列高,后期打算统一使用@ExcelTarget的height,这个会被废弃,注意isStatisticsbooleanfasle自动统计数据,在追加一行统计,把所有数据都和输出这个处理会吞没异常,请注意这一点isHyperlinkbooleanfalse超链接,如果是需要实现接口返回对象isImportFieldbooleantrue校验字段,看看这个字段是不是导入的Excel中有,如果没有说明是错误的Excel,读取失败,支持name_idexportFormatString""导出的时间格式,以这个是否为空来判断是否需要格式化日期importFormatString""导入的时间格式,以这个是否为空来判断是否需要格式化日期formatString""时间格式,相当于同时设置了exportFormat 和 importFormatdatabaseFormatString"yyyyMMddHHmmss"导出时间设置,如果字段是Date类型则不需要设置 数据库如果是string 类型,这个需要设置这个数据库格式,用以转换时间格式输出numFormatString""数字格式化,参数是Pattern,使用的对象是DecimalFormatimageTypeint1导出类型 1 从file读取 2 是从数据库中读取 默认是文件 同样导入也是一样的suffixString""文字后缀,如% 90 变成90%isWrapbooleantrue是否换行 即支持\nmergeRelyint[]{}合并单元格依赖关系,比如第二列合并是基于第一列 则{1}就可以了mergeVerticalbooleanfasle纵向合并内容相同的单元格import cn.afterturn.easypoi.excel.annotation.Excel;import java.util.Date;public class Person { 导入导出公用方法 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); } public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName, HttpServletResponse response){ defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName)); } public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response){ defaultExport(list, fileName, response); } 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); } 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 NormalException(e.getMessage()); } } 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); } 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 NormalException("模板不能为空"); } catch (Exception e) { e.printStackTrace(); throw new NormalException(e.getMessage()); } return list; } 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 NormalException("excel文件不能为空"); } catch (Exception e) { throw new NormalException(e.getMessage()); } return list; }
对的,没看错,这就可以导出导入了,看起来代码挺多,其实是提供了多个导入导出方法而已
测试 导出结果 导出结果 测试导入导出结果再添加一行,执行,输出导入数据行数
作者:小尘哥链接:https://www.jianshu.com/p/5d67fb720ece來源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。