songguoqiang
6 months ago
7 changed files with 128 additions and 1 deletions
@ -0,0 +1,88 @@ |
|||
package com.win.framework.excel.core.handler; |
|||
|
|||
import com.alibaba.excel.metadata.Head; |
|||
import com.alibaba.excel.metadata.data.WriteCellData; |
|||
import com.alibaba.excel.write.handler.CellWriteHandler; |
|||
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; |
|||
import com.alibaba.excel.write.metadata.holder.WriteTableHolder; |
|||
import com.alibaba.excel.write.metadata.style.WriteCellStyle; |
|||
import com.alibaba.excel.write.metadata.style.WriteFont; |
|||
import com.win.framework.excel.core.annotations.Colour; |
|||
import com.win.framework.excel.core.annotations.ExcelValid; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.apache.poi.ss.usermodel.*; |
|||
import org.apache.poi.xssf.usermodel.XSSFClientAnchor; |
|||
import org.apache.poi.xssf.usermodel.XSSFRichTextString; |
|||
|
|||
import java.lang.reflect.Field; |
|||
import java.util.List; |
|||
|
|||
@Slf4j |
|||
public class CustomCellWriteHandler implements CellWriteHandler { |
|||
|
|||
@Override |
|||
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { |
|||
if(isHead){ |
|||
WriteCellData writeCellData = cellDataList.get(0); |
|||
WriteCellStyle headWriteCellStyle = writeCellData.getOrCreateStyle(); |
|||
// 头的策略 样式调整
|
|||
Field field = head.getField(); |
|||
if (field.isAnnotationPresent(Colour.class)) { |
|||
// 如果是头部 主表数据
|
|||
headWriteCellStyle.setFillForegroundColor(field.getAnnotation(Colour.class).value().getIndex()); |
|||
}else { |
|||
//头背景 浅绿 子表数据
|
|||
headWriteCellStyle.setFillForegroundColor(IndexedColors.LIGHT_GREEN.getIndex()); |
|||
} |
|||
WriteFont headWriteFont = new WriteFont(); |
|||
// 头字号
|
|||
headWriteFont.setFontHeightInPoints((short) 14); |
|||
// 字体样式
|
|||
headWriteFont.setFontName("宋体"); |
|||
headWriteCellStyle.setWriteFont(headWriteFont); |
|||
// 自动换行
|
|||
headWriteCellStyle.setWrapped(true); |
|||
// 设置细边框
|
|||
headWriteCellStyle.setBorderBottom(BorderStyle.THIN); |
|||
headWriteCellStyle.setBorderLeft(BorderStyle.THIN); |
|||
headWriteCellStyle.setBorderRight(BorderStyle.THIN); |
|||
headWriteCellStyle.setBorderTop(BorderStyle.THIN); |
|||
|
|||
// 设置必填项备注消息
|
|||
if(field.isAnnotationPresent(ExcelValid.class)){ |
|||
Sheet sheet = writeSheetHolder.getSheet(); |
|||
// 备注
|
|||
Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch(); |
|||
Comment comment = drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), 0, (short) cell.getColumnIndex()+1, 1)); |
|||
comment.setString(new XSSFRichTextString(field.getAnnotation(ExcelValid.class).message())); |
|||
// 将批注添加到单元格对象中
|
|||
sheet.getRow(cell.getRowIndex()).getCell(cell.getColumnIndex()).setCellComment(comment); |
|||
} |
|||
// 设置边框颜色 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); |
|||
}else { |
|||
for(int i=1;i<cellDataList.size();i++){ |
|||
WriteCellData writeCellData = cellDataList.get(i); |
|||
// 内容的策略 宋体
|
|||
WriteCellStyle contentStyle = writeCellData.getOrCreateStyle(); |
|||
// 设置垂直居中
|
|||
contentStyle.setVerticalAlignment(VerticalAlignment.CENTER); |
|||
// 设置 水平居中
|
|||
contentStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); |
|||
WriteFont contentWriteFont = new WriteFont(); |
|||
// 内容字号
|
|||
contentWriteFont.setFontHeightInPoints((short) 12); |
|||
// 字体样式
|
|||
contentWriteFont.setFontName("宋体"); |
|||
contentStyle.setWriteFont(contentWriteFont); |
|||
} |
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue