| New file | 
|  |  |  | 
|---|
|  |  |  | package com.dy.pipIrrGlobal.excel; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.alibaba.excel.metadata.Head; | 
|---|
|  |  |  | import com.alibaba.excel.metadata.data.WriteCellData; | 
|---|
|  |  |  | import com.alibaba.excel.write.handler.context.CellWriteHandlerContext; | 
|---|
|  |  |  | 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.alibaba.excel.write.style.AbstractVerticalCellStyleStrategy; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; | 
|---|
|  |  |  | import org.apache.poi.ss.usermodel.*; | 
|---|
|  |  |  | import org.apache.poi.xssf.usermodel.DefaultIndexedColorMap; | 
|---|
|  |  |  | import org.apache.poi.xssf.usermodel.XSSFCellStyle; | 
|---|
|  |  |  | import org.apache.poi.xssf.usermodel.XSSFColor; | 
|---|
|  |  |  | import org.springframework.util.PropertyPlaceholderHelper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.Objects; | 
|---|
|  |  |  | import java.util.Properties; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @author ZhuBaoMin | 
|---|
|  |  |  | * @date 2024-10-12 11:40 | 
|---|
|  |  |  | * @LastEditTime 2024-10-12 11:40 | 
|---|
|  |  |  | * @Description 总账表格设置 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public class CellWriteHandler extends AbstractVerticalCellStyleStrategy { | 
|---|
|  |  |  | private String title; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | PropertyPlaceholderHelper propertyPlaceholderHelper = new PropertyPlaceholderHelper("${", "}"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public CellWriteHandler(String title) { | 
|---|
|  |  |  | this.title = title; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 动态导入标题 | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, | 
|---|
|  |  |  | Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) { | 
|---|
|  |  |  | if (head != null) { | 
|---|
|  |  |  | List<String> headNameList = head.getHeadNameList(); | 
|---|
|  |  |  | if (CollectionUtils.isNotEmpty(headNameList)) { | 
|---|
|  |  |  | Properties properties = new Properties(); | 
|---|
|  |  |  | properties.setProperty("title", title); | 
|---|
|  |  |  | headNameList.replaceAll(value -> propertyPlaceholderHelper.replacePlaceholders(value, properties)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 设置标题样式,包含字体、背景 | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | protected void setHeadCellStyle(CellWriteHandlerContext context) { | 
|---|
|  |  |  | // 获取和创建CellStyle | 
|---|
|  |  |  | WriteCellData<?> cellData = context.getFirstCellData(); | 
|---|
|  |  |  | CellStyle originCellStyle = cellData.getOriginCellStyle(); | 
|---|
|  |  |  | Cell cell = context.getCell(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (Objects.isNull(originCellStyle)) { | 
|---|
|  |  |  | originCellStyle = context.getWriteWorkbookHolder().getWorkbook().createCellStyle(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ((XSSFCellStyle) originCellStyle).setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 255, 255), new DefaultIndexedColorMap())); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 设置指定列背景色 | 
|---|
|  |  |  | //if(cell.getColumnIndex() == 10 | 
|---|
|  |  |  | //) { | 
|---|
|  |  |  | //    ((XSSFCellStyle) originCellStyle).setFillForegroundColor(new XSSFColor(new java.awt.Color(237, 237, 237), new DefaultIndexedColorMap())); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 设置背景颜色 | 
|---|
|  |  |  | originCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); | 
|---|
|  |  |  | // 由于在FillStyleCellWriteHandler,会把OriginCellStyle和WriteCellStyle合并,会以WriteCellStyle样式为主,所有必须把WriteCellStyle设置的背景色清空 | 
|---|
|  |  |  | // 具体合并规则看WriteWorkbookHolder.createCellStyle方法 | 
|---|
|  |  |  | WriteCellStyle writeCellStyle = cellData.getWriteCellStyle(); | 
|---|
|  |  |  | writeCellStyle.setFillForegroundColor(null); | 
|---|
|  |  |  | // 必须设置OriginCellStyle | 
|---|
|  |  |  | cellData.setOriginCellStyle(originCellStyle); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WriteFont headWriteFont = new WriteFont(); | 
|---|
|  |  |  | if (cell.getRowIndex() == 0) { | 
|---|
|  |  |  | headWriteFont.setFontHeightInPoints((short)14); | 
|---|
|  |  |  | headWriteFont.setFontName("Arial"); | 
|---|
|  |  |  | headWriteFont.setBold(true); | 
|---|
|  |  |  | }else if (cell.getRowIndex() == 1) { | 
|---|
|  |  |  | headWriteFont.setFontHeightInPoints((short)12); | 
|---|
|  |  |  | headWriteFont.setFontName("Arial"); | 
|---|
|  |  |  | headWriteFont.setBold(false); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | cellData.getWriteCellStyle().setWriteFont(headWriteFont); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 设置内容公示、内容字体样式、背景样式 | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | protected void setContentCellStyle(CellWriteHandlerContext context) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取和创建CellStyle | 
|---|
|  |  |  | WriteCellData<?> cellData = context.getFirstCellData(); | 
|---|
|  |  |  | CellStyle originCellStyle = cellData.getOriginCellStyle(); | 
|---|
|  |  |  | Cell cell = context.getCell(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (Objects.isNull(originCellStyle)) { | 
|---|
|  |  |  | originCellStyle = context.getWriteWorkbookHolder().getWorkbook().createCellStyle(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 设置背景颜色 | 
|---|
|  |  |  | ((XSSFCellStyle) originCellStyle).setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 192, 0), new DefaultIndexedColorMap())); | 
|---|
|  |  |  | //System.out.println("Go to row: " +  context.getCell().getRowIndex() + ", column: " +  context.getCell().getColumnIndex()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (cell.getRowIndex() >= 2){ | 
|---|
|  |  |  | ((XSSFCellStyle) originCellStyle).setFillForegroundColor(new XSSFColor(new java.awt.Color(237, 237, 237), new DefaultIndexedColorMap())); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //if (cell.getColumnIndex() == 10){ | 
|---|
|  |  |  | //    int actualCellRowNum =  context.getCell().getRowIndex() + 1; | 
|---|
|  |  |  | //    context.getCell().setCellFormula("I" + actualCellRowNum +"+J" + actualCellRowNum); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | originCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); | 
|---|
|  |  |  | originCellStyle.setBorderLeft(BorderStyle.THIN);                    //左边框线 | 
|---|
|  |  |  | originCellStyle.setBorderTop(BorderStyle.THIN);                     //顶部框线 | 
|---|
|  |  |  | originCellStyle.setBorderRight(BorderStyle.THIN);                   //右边框线 | 
|---|
|  |  |  | originCellStyle.setBorderBottom(BorderStyle.THIN);                  //底部框线 | 
|---|
|  |  |  | // 由于在FillStyleCellWriteHandler,会把OriginCellStyle和WriteCellStyle合并,会以WriteCellStyle样式为主,所有必须把WriteCellStyle设置的背景色清空 | 
|---|
|  |  |  | // 具体合并规则看WriteWorkbookHolder.createCellStyle方法 | 
|---|
|  |  |  | WriteCellStyle writeCellStyle = cellData.getWriteCellStyle(); | 
|---|
|  |  |  | writeCellStyle.setFillForegroundColor(null); | 
|---|
|  |  |  | writeCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); | 
|---|
|  |  |  | writeCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); | 
|---|
|  |  |  | // 必须设置OriginCellStyle | 
|---|
|  |  |  | cellData.setOriginCellStyle(originCellStyle); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WriteFont headWriteFont = new WriteFont(); | 
|---|
|  |  |  | headWriteFont.setFontHeightInPoints((short)12); | 
|---|
|  |  |  | headWriteFont.setFontName("宋体"); | 
|---|
|  |  |  | headWriteFont.setBold(false); | 
|---|
|  |  |  | headWriteFont.setColor(IndexedColors.BLACK.getIndex()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | cellData.getWriteCellStyle().setWriteFont(headWriteFont); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|