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() { private List 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() { private List 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() { private List 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() { private List 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() { private List 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 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 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 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 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 }); } }