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 });
|
}
|
}
|