知方号

知方号

EasyExcel表头宽度根据数据内容自适应+自动换行

EasyExcel表头宽度根据数据内容自适应+自动换行

我的版本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);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。