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); |
| | | } |
| | | } |