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