依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
demo 比poi缩减了很多 ,真正的读写就一行就一行
@PostMapping("/read")
void readExcel(){
read(new File("J:\\Xworkspace/demo.xlsx"), BankInfo.class,new DemoDataListener()).sheet().doRead();
}
@GetMapping("/write")
void writeExcel(){
List<BankInfo> bankInfos = bankService.fandAll();
// EasyExcel.write("D:\\demo666.xlsx", BankInfo.class).sheet("银行").doWrite(bankInfos);
System.out.println("1121--------------------");
write("D:\\\\demo666.xlsx",BankInfo.class).sheet("银行").registerWriteHandler(new RowWriteHandler()).doWrite(bankInfos);
}
@GetMapping("download")
public void download(HttpServletResponse response) throws IOException {
List<BankInfo> bankInfos = bankService.fandAll();
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("测试", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), BankInfo.class).sheet("模板").doWrite(bankInfos);
}
@PostMapping("upload")
@ResponseBody
public String upload(MultipartFile file) throws IOException {
EasyExcel.read(file.getInputStream(), BankInfo.class, new UploadDataListener()).sheet().doRead();
return "success";
}
需要修改就继承相应的 监听器或者自定义写入父类
上面是简单使用的demo
修改sheet格式 需要继承 CellWriteHandler 在创建sheet页后去使用该模板类 因为没找到能改成数值格式,所以只能改成默认保留两位小数的自定义格式代码如下
public class RowWriteHandler implements CellWriteHandler {
private HashMap<Integer, List<Integer>> map;
public RowWriteHandler(HashMap<Integer, List<Integer>> map, Short colorIndex) {
this.map = map;
}
public RowWriteHandler() {
}
@Override
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {
}
@Override
public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {
//当前行的第i列
// int i = cell.getColumnIndex();
//不处理第一行
if (0 != cell.getRowIndex()) {
if (2 == cell.getColumnIndex()) {
Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
CellStyle cellStyle = workbook.createCellStyle();
DataFormat dataFormat = workbook.createDataFormat();
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
cell.setCellStyle(cellStyle);
}
}
}
//加@Override会报错
public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {
}
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
}
}