看固定模板的設(shè)置格式是這樣的
public class FourListExcelDto {
@ContentStyle(dataFormat = 14)
@DateTimeFormat("yyyy/M/dd")
@ExcelProperty({"時間"})
private Date exportDate;
}
但是非固定模板的是根據(jù)你來的數(shù)據(jù)來生成文件的這樣就無法使用了。
用EasyExcel.write(outputStream).registerWriteHandler(xxx).doWrite(data)生成文件,我們可以自己實現(xiàn)一個registerWriteHandler,去格式化單元格。
新建Handler類,繼承AbstractCellStyleStrategy
public class ExcelCellStyleStrategy extends AbstractCellStyleStrategy {
/**
* 單元格格式列表(格式:GENERAL、CURRENCY_¥、CURRENCY_$、DATE、NUMERIC)
*/
private final List<String> cellDataTypes;
/**
* WorkBoot
*/
private Workbook workbook;
/**
* 構(gòu)造方法,創(chuàng)建對象時傳入需要定制的表頭信息隊列
*/
public ExcelCellStyleStrategy(List<String> cellDataTypes) {
this.cellDataTypes = cellDataTypes;
}
@Override
protected void initCellStyle(Workbook workbook) {
// 初始化信息時,保存Workbook對象,轉(zhuǎn)換時需要使用
this.workbook = workbook;
}
@Override
protected void setHeadCellStyle(Cell cell, Head head, Integer relativeRowIndex) {
// 處理表頭的
}
@Override
protected void setContentCellStyle(Cell cell, Head head, Integer relativeRowIndex) {
CellStyle cellStyle = workbook.createCellStyle();
String cellValue = cell.getStringCellValue();
String dataTypes = cellDataTypes.get(head.getColumnIndex());
switch (dataTypes) {
case "DATE":
// 時間
if (StrUtil.isNotBlank(cellValue)) {
DateTime dateTime = DateUtil.parseDateTime(cellValue);
cell.setCellValue(DateUtil.format(dateTime, "yyyy/m/d h:mm"));
cellStyle.setDataFormat((short) 164);
}
break;
case "NUMERIC":
// 數(shù)字
cell.setCellType(CellType.NUMERIC);
// cellStyle.setDataFormat((short) 1);
// 自定義格式
// 1 -> "0", 表示整數(shù)
// 2 -> "0.00", 表示浮點數(shù)
// 3 -> "#,##0", 表示三個數(shù)字加一個","格式的整數(shù)
// 4 -> "#,##0.00", 表示三個數(shù)字加一個","格式的浮點數(shù)
if (StrUtil.isBlank(cellValue)) {
cell.setCellValue("");
} else {
cell.setCellValue(Integer.parseInt(cellValue));
}
break;
default:
if (dataTypes.startsWith("CURRENCY_")) {
// 貨幣
String currency = dataTypes.substring(9);
cell.setCellValue(StrUtil.format("{}{}", currency, StrUtil.isBlank(cellValue) ? "-" : cellValue));
cellStyle.setDataFormat((short) 42);
}
// 默認(rèn)是通用類型,無需額外處理
}
cell.setCellStyle(cellStyle);
}
}
主要看setContentCellStyle方法,創(chuàng)建ExcelCellStyleStrategy時需要把每一列的數(shù)據(jù)類型傳遞過來。
cellStyle.setDataFormat這個有意思,可以好好研究一下。
easypoi支持的自定義格式列表
BuiltinFormats類的_formats列表里的自定義格式才有效,否則就會使用文本格式。
記錄數(shù)據(jù)類型就根據(jù)你實際情況來寫了,下面時我這邊的。根據(jù)業(yè)務(wù)來寫的,別無腦跟!
設(shè)置效果
貨幣
日期
唯重
關(guān)注
————————————————
版權(quán)聲明:本文為CSDN博主「唯重」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/GMingZhou/article/details/124149506
聯(lián)系客服