EasyExcel导出自动适应列宽 Excel样式

您所在的位置:网站首页 excel怎么将列宽设置为自动调整 EasyExcel导出自动适应列宽 Excel样式

EasyExcel导出自动适应列宽 Excel样式

2023-07-25 19:25| 来源: 网络整理| 查看: 265

 EasyExcel自动适应列宽 导出直接套用此方法即可使用 在导出时引用即可 导出引用示例在下方

package com.gaiaworks.cn.opm.emp.biz.util.excel; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.util.CollectionUtils; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy; import org.apache.poi.ss.usermodel.Cell; import java.util.HashMap; import java.util.List; import java.util.Map; /** * excel自适应列宽 拉过去就能直接套用自动适应列宽 */ public class CustomCellWriteUtil extends AbstractColumnWidthStyleStrategy { private static final int MAX_COLUMN_WIDTH = 255; private Map CACHE = new HashMap(8); public CustomCellWriteUtil() { } 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 = (Map) CACHE.get(writeSheetHolder.getSheetNo()); if (maxColumnWidthMap == null) { maxColumnWidthMap = new HashMap(16); CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap); } Integer columnWidth = this.dataLength(cellDataList, cell, isHead); if (columnWidth >= 0) { if (columnWidth > 255) { columnWidth = 255; } Integer maxColumnWidth = (Integer) ((Map) maxColumnWidthMap).get(cell.getColumnIndex()); if (maxColumnWidth == null || columnWidth > maxColumnWidth) { ((Map) maxColumnWidthMap).put(cell.getColumnIndex(), columnWidth); writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), 7250); } } } } private Integer dataLength(List cellDataList, Cell cell, Boolean isHead) { if (isHead) { return cell.getStringCellValue().getBytes().length; } else { CellData cellData = (CellData) cellDataList.get(0); CellDataTypeEnum type = cellData.getType(); if (type == null) { return -1; } else { switch (type) { case STRING: return cellData.getStringValue().getBytes().length; case BOOLEAN: return cellData.getBooleanValue().toString().getBytes().length; case NUMBER: return cellData.getNumberValue().toString().getBytes().length; default: return -1; } } } } }

 设置EasyExcel样式的方法 

package com.gaiaworks.cn.opm.emp.biz.util.excel; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.metadata.style.WriteFont; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.gaiaworks.cn.opm.emp.component.constants.CommonConstant; import com.gaiaworks.cn.opm.emp.component.constants.Symbol; import org.apache.commons.lang3.ObjectUtils; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.VerticalAlignment; import java.lang.reflect.Field; import java.util.List; public class ExcelUtil { /** * 设置excel样式 * 返回样式 Style 具体细节可以在网上查找样式元素 自行替换 现在这个也是可以直接套用的 * @return */ public static HorizontalCellStyleStrategy getStyleStrategy() { // 头的策略 样式调整 WriteCellStyle headWriteCellStyle = new WriteCellStyle(); // 头背景 浅绿 headWriteCellStyle.setFillForegroundColor(IndexedColors.LIGHT_GREEN.getIndex()); WriteFont headWriteFont = new WriteFont(); // 头字号 headWriteFont.setFontHeightInPoints((short) 14); // 字体样式 headWriteFont.setFontName("宋体"); headWriteCellStyle.setWriteFont(headWriteFont); // 自动换行 headWriteCellStyle.setWrapped(false); // 设置细边框 headWriteCellStyle.setBorderBottom(BorderStyle.THIN); headWriteCellStyle.setBorderLeft(BorderStyle.THIN); headWriteCellStyle.setBorderRight(BorderStyle.THIN); headWriteCellStyle.setBorderTop(BorderStyle.THIN); // 设置边框颜色 25灰度 headWriteCellStyle.setBottomBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); headWriteCellStyle.setTopBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); headWriteCellStyle.setLeftBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); headWriteCellStyle.setRightBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); // 水平对齐方式 headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); // 垂直对齐方式 headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 内容的策略 宋体 WriteCellStyle contentStyle = new WriteCellStyle(); // 设置垂直居中 contentStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 设置 水平居中 // contentStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); WriteFont contentWriteFont = new WriteFont(); // 内容字号 contentWriteFont.setFontHeightInPoints((short) 12); // 字体样式 contentWriteFont.setFontName("宋体"); contentStyle.setWriteFont(contentWriteFont); // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现 return new HorizontalCellStyleStrategy(headWriteCellStyle, contentStyle); } // 下面这两个方法没用到过 之前也是粘贴过来的现在不知道 又什么用 (>@_@


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3