Fork me on GitEE

easyExcel 将一列的单元格格式改为数值格式


依赖
<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) {

}
}

 

 









posted @ 2021-06-09 14:58  问道于盲  阅读(8179)  评论(0编辑  收藏  举报