依賴
<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) {
}
}