在導入依賴錢看是否項目中存在poi相關的版本。直接從pom文件中去除exclusion。java
本次使用的是4.2.0 。maven依賴以下:spring
<dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>4.2.0</version> </dependency> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.1.6.Final</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>4.0.0</version> <exclusions> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
貌似沒用到easypoi-base 。先無論了sql
官方文檔;數據庫
public class MaterialExport implements Serializable { // 物資名稱 @Excel(name = "物資名稱", width = 15) private String name; // 物資規格 @Excel(name = "物資規格") private String specs; // 物資類型 @Excel(name = "物資類型") private String type; // 單位 @Excel(name = "單位") private String unit; // 庫存 @Excel(name = "庫存") private long num; //單價 @Excel(name = "單價") private BigDecimal unitprice; // 廠家 @Excel(name = "廠家", width = 20) private String manufactor; // 庫存位置 @Excel(name = "庫存位置", width = 20) private String address; // 用途 @Excel(name = "用途", width = 20) private String purpose; @Excel(name = "入庫時間",format = "yyyy年MM月dd日", width = 25) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; // 備註 @Excel(name = "備註", width = 40) private String remarks; //getter setter方法省略。 }
在導入時須要注意:實體中用到的屬性爲java基本屬性或者是在「java.lang」、「java.math」、「java.sql」、「java.util」包中具體easypoi中邏輯代碼爲:apache
/** * 是否是java基礎類 * * @param field * @return */ public static boolean isJavaClass(Field field) { Class<?> fieldType = field.getType(); boolean isBaseClass = false; if (fieldType.isArray()) { isBaseClass = false; } else if (fieldType.isPrimitive() || fieldType.getPackage() == null || "java.lang".equals(fieldType.getPackage().getName()) || "java.math".equals(fieldType.getPackage().getName()) || "java.sql".equals(fieldType.getPackage().getName()) || "java.util".equals(fieldType.getPackage().getName())) { isBaseClass = true; } return isBaseClass; }
獲取數據後直接調用Util方法
controller:app
public Result export(HttpServletRequest request, HttpServletResponse response) { System.out.println(sdf.format(new Date())); //此處爲從數據庫獲取list List<MaterialExport> materialExports = materialService.export(); response.setContentType("application/vnd.ms-excel"); OutputStream out = null; try { response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("物資導出" + sdf.format(new Date()) + ".xls","ISO-8859-1" )); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("物資庫存信息", "物資"), MaterialExport.class, materialExports); out = response.getOutputStream(); workbook.write(out); } catch (Exception e) { System.out.println(e.getMessage()); System.out.println(e); } finally { try { if (out != null) out.close(); } catch (IOException e) { } } return Response.success(); }
從文件流中獲取數據用easypoi解析數據:maven
public Result inport(HttpServletRequest request,@RequestParam("file") MultipartFile fileItem) { ImportParams importParams = new ImportParams(); importParams.setHeadRows(2); // 獲取模板 ExcelImportResult<MaterialExport> data = null; try { data = ExcelImportUtil.importExcelMore(fileItem.getInputStream(), MaterialExport.class, importParams); } catch (Exception e) { e.printStackTrace(); } // 獲取模板數據 List<MaterialExport> successList = data.getList(); int total = successList.size(); // 循環數據 System.out.println(total); for (MaterialExport excelDTO : successList) { System.out.println(excelDTO.toString()); } return Response.success(); }
完畢。spring-boot
本文由博客羣發一文多發等運營工具平臺 OpenWrite 發佈工具