springMVC+easypoi做excel的導入導出


1.認識

Java操作辦公軟件:jxl、poi

數據讀取用POI,只要不涉及單元格樣式的寫入使用jxl效率高點。POI讀取效率高,但是大數據量寫入Excel效率比jxl慢。

jxl只使用03版本、po使用所有版本

2.easypoi需要導入的jar包

 1 <dependency>
 2       <groupId>cn.afterturn</groupId>
 3       <artifactId>easypoi-base</artifactId>
 4       <version>3.2.0</version>
 5     </dependency>
 6     <dependency>
 7       <groupId>cn.afterturn</groupId>
 8       <artifactId>easypoi-web</artifactId>
 9       <version>3.2.0</version>
10     </dependency>
11     <dependency>
12       <groupId>cn.afterturn</groupId>
13       <artifactId>easypoi-annotation</artifactId>
14       <version>3.2.0</version>
15     </dependency>
1  <!-- JSR 303 規范驗證包 Excel驗證-->
2     <dependency>
3       <groupId>org.hibernate</groupId>
4       <artifactId>hibernate-validator</artifactId>
5       <version>5.2.4.Final</version>
6     </dependency>

 

3.在需要操作的實體類進行配置注解

@Excel注解為需要導入或是導出的數據、name為表頭、

注意:type=2表示為圖片、format可以設置日期格式

 2 public class Employee extends BaseDomain{
 3     @Excel(name = "用戶名")
 4     @NotNull(message = "用戶名不能為空")
 5     private String username;
 6     private String password;
 7     @Excel(name = "郵箱",width = 20)
 8     private String email;
 9     @Excel(name = "年齡")
10     @Max(value = 60,message = "年齡不能大於60")
11     @Min(value = 18,message = "年齡不能小於18")
12     private Integer age;
13     @Excel(name = "頭像",type = 2,height = 30)
14     private String headImage;

4.在applicationContex中配置view

1 <!--Excel導出的視圖解析器-->
2     <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0"></bean>
3     <!--掃描Excel的view-->
4     <context:component-scan base-package="cn.afterturn.easypoi.view"/>

5.導出

 1 public String exportExcel(ModelMap map, SystemlogQuery query){
 2         //拿到數據
 3         List<Systemlog> list = systemlogService.findAll();
 4         ExportParams params = new ExportParams("日志數據", "日志表", ExcelType.XSSF);
 5 //        params.setFreezeCol(5); //凍結  那條綠線
 6         map.put(NormalExcelConstants.DATA_LIST, list); // 數據集合
 7         map.put(NormalExcelConstants.CLASS, Systemlog.class);//導出實體
 8         map.put(NormalExcelConstants.PARAMS, params);//參數
 9         map.put(NormalExcelConstants.FILE_NAME, "日志信息");//文件名稱
10         return  NormalExcelConstants.EASYPOI_EXCEL_VIEW;//需要配置新的視圖解析器並設置優先級和掃描
11     }

6.導入

 1  //empFile名字與前台一致
 2     public String importXlsx(MultipartFile empFile,HttpServletResponse response) throws Exception{
 3         //獲取參數
 4         ImportParams params = new ImportParams();
 5         params.setHeadRows(1); //不要這行
 6         //驗證開啟
 7         params.setNeedVerfiy(true);
 8         //自定義驗證
 9         params.setVerifyHandler(employeeExcelVerifyHandler);
10         //導入參數
11         /*List<Employee> list = ExcelImportUtil.importExcel(
12                 empFile.getInputStream(),
13                 Employee.class, params);*/
14         ExcelImportResult<Employee> result = ExcelImportUtil.importExcelMore(
15                 empFile.getInputStream(),
16                 Employee.class, params);
17 
18         //獲取正確導入的集合
19         List<Employee> list = result.getList();
20         for (Employee employee : list) {
21             employee.setPassword("123"); //默認密碼123
22             if(employee.getDepartment()!=null) {
23                 //設置部門
24                 Department department = departmentService.findByName(employee.getDepartment().getName());
25                 employee.setDepartment(department);
26             }
27 
28             employeeService.save(employee);
29         }
30         //如果導入失敗
31         if(result.isVerfiyFail()){
32             //獲取導入失敗的員工的Excel
33             Workbook failWorkbook = result.getFailWorkbook();
34             //導出Excel表
35             //獲取輸出流
36             ServletOutputStream fos = response.getOutputStream();
37             //響應類型
38             response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); //mime類型
39             //告訴瀏覽器這是下載
40             response.setHeader("Content-disposition", "attachment;filename=errorx.xlsx");
41             //不要緩存
42             response.setHeader("Pragma", "No-cache");
43             failWorkbook.write(fos);
44             fos.flush();
45             fos.close();
46         }
47         return "import";
48     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM