我的版本EasyExcel为3.x,如果使用2.x可能有些字段不一样

表头宽度根据数据内容自适应

配置类

import com.alibaba.excel.enums.CellDataTypeEnum;

import com.alibaba.excel.metadata.Head;

import com.alibaba.excel.metadata.data.WriteCellData;

import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;

import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;

import org.apache.poi.ss.usermodel.Cell;

import org.springframework.util.CollectionUtils;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* 表头宽度根据数据内容自适应

*/

public class CustomWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {

private Map> CACHE = new HashMap<>();

/**

* 设置列宽

*

* @param writeSheetHolder

* @param cellDataList

* @param cell

* @param head

* @param relativeRowIndex

* @param isHead

*/

@Override

protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {

boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);

if (needSetWidth) {

Map maxColumnWidthMap = CACHE.get(writeSheetHolder.getSheetNo());

if (maxColumnWidthMap == null) {

maxColumnWidthMap = new HashMap<>();

CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);

}

Integer columnWidth = this.dataLength(cellDataList, cell, isHead)/2;

if (columnWidth >= 0) {

if (columnWidth > 255) {

columnWidth = 255;

}

Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());

if (maxColumnWidth == null || columnWidth > maxColumnWidth) {

maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);

writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);

}

}

}

}

/**

* 数据长度

*

* @param cellDataList

* @param cell

* @param isHead

* @return

*/

private Integer dataLength(List> cellDataList, Cell cell, Boolean isHead) {

//头直接返回原始长度

if (isHead) {

return cell.getStringCellValue().getBytes().length;

} else {

//不是头的话 看是什么类型 用数字加就可以了

WriteCellData cellData = cellDataList.get(0);

CellDataTypeEnum type = cellData.getType();

if (type == null) {

return -1;

} else {

switch (type) {

case STRING:

return cellData.getStringValue().getBytes().length + 1;

case BOOLEAN:

return cellData.getBooleanValue().toString().getBytes().length;

case NUMBER:

return cellData.getNumberValue().toString().getBytes().length * 2;

default:

return -1;

}

}

}

}

}

使用EasyExcel写入到excel里面

EasyExcel.write(byteArrayOutputStream, DatasetRefreshHistoryVo.class)

.sheet("模板")

.registerWriteHandler(new CustomWidthStyleStrategy())

.doWrite(list);

自动换行

配置

/**

* 单元格样式策略

*/

public static HorizontalCellStyleStrategy getHorizontalCellStyleStrategy() {

// 内容的策略

WriteCellStyle contentWriteCellStyle = new WriteCellStyle();

// 设置边框

contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);

contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);

contentWriteCellStyle.setBorderRight(BorderStyle.THIN);

contentWriteCellStyle.setBorderTop(BorderStyle.NONE);

// 配置字体

WriteFont contentWriteFont = new WriteFont();

// 字体

// contentWriteFont.setFontName("宋体");

// 字体大小

// contentWriteFont.setFontHeightInPoints(fontHeightInPoints);

// 设置加粗

contentWriteFont.setBold(false);

contentWriteCellStyle.setWriteFont(contentWriteFont);

// 【水平居中需要使用以下两行】

// 设置文字左右居中

contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);

// 设置文字上下居中

contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

// 设置 自动换行

contentWriteCellStyle.setWrapped(true);

contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);

contentWriteCellStyle.setFillForegroundColor(IndexedColors.PINK.getIndex());

// 样式策略

return new HorizontalCellStyleStrategy(null, contentWriteCellStyle);

}

使用EasyExcel写入到excel里面 可以同时使用两个registerWriteHandler

EasyExcel.write(byteArrayOutputStream, DatasetRefreshHistoryVo.class)

.sheet("模板")

.registerWriteHandler(this.getHorizontalCellStyleStrategy())

.registerWriteHandler(new CustomWidthStyleStrategy())

.doWrite(list);

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。