| package com.zt.modules.sample.controller; | 
|   | 
| import com.alibaba.excel.EasyExcel; | 
| import com.alibaba.excel.ExcelReader; | 
| import com.alibaba.excel.context.AnalysisContext; | 
| import com.alibaba.excel.event.AnalysisEventListener; | 
| import com.alibaba.excel.read.metadata.ReadSheet; | 
| import com.zt.common.servlet.Result; | 
| import com.zt.common.utils.ExcelUtils; | 
| import com.zt.modules.sample.excel.MultipleHeaderExcel; | 
| import com.zt.modules.sample.excel.SampleExcel; | 
| import io.swagger.annotations.Api; | 
| import io.swagger.annotations.ApiOperation; | 
| import org.springframework.web.bind.annotation.GetMapping; | 
| import org.springframework.web.bind.annotation.PostMapping; | 
| import org.springframework.web.bind.annotation.RequestMapping; | 
| import org.springframework.web.bind.annotation.RestController; | 
| import org.springframework.web.multipart.MultipartFile; | 
|   | 
| import javax.servlet.http.HttpServletResponse; | 
| import java.io.IOException; | 
| import java.util.ArrayList; | 
| import java.util.List; | 
|   | 
| /** | 
|  * 示例 | 
|  * | 
|  * @author hehz | 
|  */ | 
| @RestController | 
| @RequestMapping("/sample") | 
| @Api(value = "示例", tags = "示例") | 
| public class SampleController { | 
|   | 
|     /** | 
|      * 导入参考https://www.yuque.com/easyexcel/doc/read | 
|      * | 
|      * @param file | 
|      * @return | 
|      * @throws IOException | 
|      */ | 
|     @PostMapping("excel/import") | 
|     @ApiOperation("Excel导入") | 
|     public Result excelImport(MultipartFile file) throws IOException { | 
|         EasyExcel.read(file.getInputStream(), SampleExcel.class, new AnalysisEventListener<SampleExcel>() { | 
|             private List<SampleExcel> list = new ArrayList<>(); | 
|   | 
|             @Override | 
|             public void invoke(SampleExcel excel, AnalysisContext analysisContext) { | 
|                 // 解析每一条 | 
|                 list.add(excel); | 
|             } | 
|   | 
|             @Override | 
|             public void doAfterAllAnalysed(AnalysisContext analysisContext) { | 
|                 // 保存数据库 | 
|                 System.out.println(list.size()); | 
|             } | 
|         }).sheet().doRead(); | 
|   | 
|         return Result.ok("这是测试成功返回结果"); | 
|     } | 
|   | 
|     @PostMapping("multiple/header/excel/import") | 
|     @ApiOperation("多表头Excel导入") | 
|     public Result excelImport2(MultipartFile file) throws IOException { | 
|         EasyExcel | 
|                 .read(file.getInputStream(), MultipleHeaderExcel.class, | 
|                         new AnalysisEventListener<MultipleHeaderExcel>() { | 
|                             private List<MultipleHeaderExcel> list = new ArrayList<>(); | 
|   | 
|                             @Override | 
|                             public void invoke(MultipleHeaderExcel excel, AnalysisContext analysisContext) { | 
|                                 // 解析每一条 | 
|                                 list.add(excel); | 
|                             } | 
|   | 
|                             @Override | 
|                             public void doAfterAllAnalysed(AnalysisContext analysisContext) { | 
|                                 // 保存数据库 | 
|                                 System.out.println(list.size()); | 
|                             } | 
|                         }).sheet().headRowNumber(2).doRead(); | 
|   | 
|         return Result.ok(); | 
|     } | 
|   | 
|     @PostMapping("multiple/sheet/excel/import") | 
|     @ApiOperation("多sheet Excel导入") | 
|     public Result excelImport3(MultipartFile file) throws IOException { | 
|         ExcelReader excelReader = null; | 
|         try { | 
|             excelReader = EasyExcel.read(file.getInputStream()).build(); | 
|   | 
|             ReadSheet readSheet1 = EasyExcel.readSheet(0).head(SampleExcel.class) | 
|                     .registerReadListener(new AnalysisEventListener<SampleExcel>() { | 
|                         private List<SampleExcel> list = new ArrayList<>(); | 
|   | 
|                         @Override | 
|                         public void invoke(SampleExcel excel, AnalysisContext analysisContext) { | 
|                             // 解析每一条 | 
|                             list.add(excel); | 
|                         } | 
|   | 
|                         @Override | 
|                         public void doAfterAllAnalysed(AnalysisContext analysisContext) { | 
|                             // 保存数据库 | 
|                             System.out.println(list.size()); | 
|                         } | 
|                     }).build(); | 
|   | 
|             ReadSheet readSheet2 = EasyExcel.readSheet(1).headRowNumber(2).head(MultipleHeaderExcel.class) | 
|                     .registerReadListener(new AnalysisEventListener<MultipleHeaderExcel>() { | 
|                         private List<MultipleHeaderExcel> list = new ArrayList<>(); | 
|   | 
|                         @Override | 
|                         public void invoke(MultipleHeaderExcel excel, AnalysisContext analysisContext) { | 
|                             // 解析每一条 | 
|                             list.add(excel); | 
|                         } | 
|   | 
|                         @Override | 
|                         public void doAfterAllAnalysed(AnalysisContext analysisContext) { | 
|                             // 保存数据库 | 
|                             System.out.println(list.size()); | 
|                         } | 
|                     }).build(); | 
|             // 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能 | 
|             excelReader.read(readSheet1, readSheet2); | 
|         } finally { | 
|             if (excelReader != null) { | 
|                 excelReader.finish(); | 
|             } | 
|         } | 
|   | 
|         EasyExcel | 
|                 .read(file.getInputStream(), MultipleHeaderExcel.class, | 
|                         new AnalysisEventListener<MultipleHeaderExcel>() { | 
|                             private List<MultipleHeaderExcel> list = new ArrayList<>(); | 
|   | 
|                             @Override | 
|                             public void invoke(MultipleHeaderExcel excel, AnalysisContext analysisContext) { | 
|                                 // 解析每一条 | 
|                                 list.add(excel); | 
|                             } | 
|   | 
|                             @Override | 
|                             public void doAfterAllAnalysed(AnalysisContext analysisContext) { | 
|                                 // 保存数据库 | 
|                                 System.out.println(list.size()); | 
|                             } | 
|                         }).sheet().doRead(); | 
|   | 
|         return Result.ok(); | 
|     } | 
|   | 
|     /** | 
|      * 具体参考https://www.yuque.com/easyexcel/doc/write | 
|      * | 
|      * @param response | 
|      * @throws Exception | 
|      */ | 
|     @GetMapping("excel/export") | 
|     @ApiOperation("Excel导出") | 
|     public void export(HttpServletResponse response) throws Exception { | 
|         List<SampleExcel> list = new ArrayList<>(); | 
|         list.add(new SampleExcel("1234567890", "这是测试一", "测试一", "这是Excel测试一", "ce shi 1")); | 
|         list.add(new SampleExcel("1234567891", "这是测试二", "测试二", "这是Excel测试二", "ce shi 2")); | 
|         list.add(new SampleExcel("1234567892", "这是测试三", "测试三", "这是Excel测试三", "ce shi 3")); | 
|         list.add(new SampleExcel("1234567893", "这是测试四", "测试四", "这是Excel测试四", "ce shi 4")); | 
|   | 
|         ExcelUtils.export(response, null, list, SampleExcel.class); | 
|     } | 
|   | 
|     @GetMapping("multiple/header/excel/export") | 
|     @ApiOperation("多表头Excel导出") | 
|     public void export2(HttpServletResponse response) throws Exception { | 
|         List<MultipleHeaderExcel> list = new ArrayList<>(); | 
|         list.add(new MultipleHeaderExcel("1234567890", "这是测试一", "测试一", "这是Excel测试一", "ce shi 1")); | 
|         list.add(new MultipleHeaderExcel("1234567891", "这是测试二", "测试二", "这是Excel测试二", "ce shi 2")); | 
|         list.add(new MultipleHeaderExcel("1234567892", "这是测试三", "测试三", "这是Excel测试三", "ce shi 3")); | 
|         list.add(new MultipleHeaderExcel("1234567893", "这是测试四", "测试四", "这是Excel测试四", "ce shi 4")); | 
|   | 
|         ExcelUtils.export(response, null, list, MultipleHeaderExcel.class); | 
|     } | 
|   | 
|     @GetMapping("multiple/sheet/excel/export") | 
|     @ApiOperation("多sheet Excel导出") | 
|     public void export3(HttpServletResponse response) throws Exception { | 
|         List<SampleExcel> list = new ArrayList<>(); | 
|         list.add(new SampleExcel("1234567890", "这是测试一", "测试一", "这是Excel测试一", "ce shi 1")); | 
|         list.add(new SampleExcel("1234567891", "这是测试二", "测试二", "这是Excel测试二", "ce shi 2")); | 
|         list.add(new SampleExcel("1234567892", "这是测试三", "测试三", "这是Excel测试三", "ce shi 3")); | 
|         list.add(new SampleExcel("1234567893", "这是测试四", "测试四", "这是Excel测试四", "ce shi 4")); | 
|   | 
|         List<MultipleHeaderExcel> list2 = new ArrayList<>(); | 
|         list2.add(new MultipleHeaderExcel("1234567890", "这是测试一", "测试一", "这是Excel测试一", "ce shi 1")); | 
|         list2.add(new MultipleHeaderExcel("1234567891", "这是测试二", "测试二", "这是Excel测试二", "ce shi 2")); | 
|         list2.add(new MultipleHeaderExcel("1234567892", "这是测试三", "测试三", "这是Excel测试三", "ce shi 3")); | 
|         list2.add(new MultipleHeaderExcel("1234567893", "这是测试四", "测试四", "这是Excel测试四", "ce shi 4")); | 
|   | 
|         ExcelUtils.export(response, null, new String[] { "普通", "多表头" }, new List[] { list, list2 }); | 
|     } | 
| } |