221 lines
5.6 KiB
Plaintext
221 lines
5.6 KiB
Plaintext
package com.sercurityControl.proteam.util;
|
|
|
|
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
|
import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams;
|
|
import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
|
|
import org.apache.poi.hssf.usermodel.HSSFPalette;
|
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
import org.apache.poi.hssf.util.HSSFColor;
|
|
import org.apache.poi.ss.usermodel.*;
|
|
|
|
/**
|
|
* @Auther: ccw
|
|
* @Date: 2022/05/12/16:22
|
|
* @description: easypoi 导出表格样式
|
|
*/
|
|
public class ExcelStyleUtil2 implements IExcelExportStyler {
|
|
private static final short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFormat("TEXT");
|
|
private static final short FONT_SIZE_TEN = 10;
|
|
private static final short FONT_SIZE_ELEVEN = 11;
|
|
private static final short FONT_SIZE_TWELVE = 12;
|
|
|
|
/**
|
|
* 大标题样式
|
|
*/
|
|
private CellStyle headerStyle;
|
|
|
|
/**
|
|
* 每列标题样式
|
|
*/
|
|
private CellStyle titleStyle;
|
|
|
|
/**
|
|
* 数据行样式
|
|
*/
|
|
private CellStyle styles;
|
|
|
|
public ExcelStyleUtil2(Workbook workbook) {
|
|
this.init(workbook);
|
|
}
|
|
|
|
/**
|
|
* 初始化样式
|
|
*
|
|
* @param workbook
|
|
*/
|
|
private void init(Workbook workbook) {
|
|
this.headerStyle = initHeaderStyle(workbook);
|
|
this.titleStyle = initTitleStyle(workbook);
|
|
this.styles = initStyles(workbook);
|
|
}
|
|
|
|
/**
|
|
* 大标题样式
|
|
*
|
|
* @param color
|
|
* @return
|
|
*/
|
|
|
|
@Override
|
|
public CellStyle getHeaderStyle(short color) {
|
|
return headerStyle;
|
|
}
|
|
|
|
/**
|
|
* 每列标题样式
|
|
*
|
|
* @param color
|
|
* @return
|
|
*/
|
|
|
|
@Override
|
|
public CellStyle getTitleStyle(short color) {
|
|
return titleStyle;
|
|
}
|
|
|
|
/**
|
|
* 数据行样式
|
|
*
|
|
* @param parity 可以用来表示奇偶行
|
|
* @param entity 数据内容
|
|
* @return 样式
|
|
*/
|
|
|
|
@Override
|
|
|
|
public CellStyle getStyles(boolean parity, ExcelExportEntity entity) {
|
|
return styles;
|
|
}
|
|
|
|
/**
|
|
* 获取样式方法
|
|
*
|
|
* @param dataRow 数据行
|
|
* @param obj 对象
|
|
* @param data 数据
|
|
*/
|
|
|
|
@Override
|
|
|
|
public CellStyle getStyles(Cell cell, int dataRow, ExcelExportEntity entity, Object obj, Object data) {
|
|
return getStyles(true, entity);
|
|
}
|
|
|
|
/**
|
|
* 模板使用的样式设置
|
|
*/
|
|
|
|
@Override
|
|
public CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams) {
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
*设置隔行变色
|
|
*/
|
|
private static final String DEFAULT_BACKGROUND_COLOR = "#FDE9D9";
|
|
public static CellStyle getStyles(Workbook workbook,boolean isBold, short size) {
|
|
int r = Integer.parseInt((DEFAULT_BACKGROUND_COLOR.substring(1, 3)), 16);
|
|
int g = Integer.parseInt((DEFAULT_BACKGROUND_COLOR.substring(3, 5)), 16);
|
|
int b = Integer.parseInt((DEFAULT_BACKGROUND_COLOR.substring(5, 7)), 16);
|
|
HSSFWorkbook wb = new HSSFWorkbook();
|
|
HSSFPalette palette = wb.getCustomPalette();
|
|
HSSFColor hssfColor = palette.findSimilarColor(r, g, b);
|
|
CellStyle style = getBaseCellStyle(workbook);
|
|
style.setFont(getFont(workbook,size,isBold));
|
|
// 背景色
|
|
style.setFillForegroundColor(hssfColor.getIndex());
|
|
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
|
style.setDataFormat(STRING_FORMAT);
|
|
return style;
|
|
}
|
|
|
|
/**
|
|
* 初始化--大标题样式
|
|
*
|
|
* @param workbook
|
|
* @return
|
|
*/
|
|
|
|
private CellStyle initHeaderStyle(Workbook workbook) {
|
|
CellStyle style = getBaseCellStyle(workbook);
|
|
style.setFont(getFont(workbook, FONT_SIZE_TWELVE, true));
|
|
return style;
|
|
}
|
|
|
|
/**
|
|
* 初始化--每列标题样式
|
|
*
|
|
* @param workbook
|
|
* @return
|
|
*/
|
|
|
|
private CellStyle initTitleStyle(Workbook workbook) {
|
|
CellStyle style = getBaseCellStyle(workbook);
|
|
style.setFont(getFont(workbook, FONT_SIZE_ELEVEN, false));
|
|
//背景色
|
|
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
|
|
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
|
return style;
|
|
|
|
}
|
|
|
|
/**
|
|
* 初始化--数据行样式
|
|
*
|
|
* @param workbook
|
|
* @return
|
|
*/
|
|
private CellStyle initStyles(Workbook workbook) {
|
|
CellStyle style = getBaseCellStyle(workbook);
|
|
style.setFont(getFont(workbook, FONT_SIZE_TEN, false));
|
|
style.setDataFormat(STRING_FORMAT);
|
|
return style;
|
|
}
|
|
|
|
/**
|
|
* 基础样式
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
private static CellStyle getBaseCellStyle(Workbook workbook) {
|
|
CellStyle style = workbook.createCellStyle();
|
|
//下边框
|
|
style.setBorderBottom(BorderStyle.THIN);
|
|
//左边框
|
|
style.setBorderLeft(BorderStyle.THIN);
|
|
//上边框
|
|
style.setBorderTop(BorderStyle.THIN);
|
|
//右边框
|
|
style.setBorderRight(BorderStyle.THIN);
|
|
//水平居中
|
|
style.setAlignment(HorizontalAlignment.CENTER);
|
|
//上下居中
|
|
style.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
//设置自动换行
|
|
style.setWrapText(true);
|
|
return style;
|
|
}
|
|
|
|
/**
|
|
* 字体样式
|
|
*
|
|
* @param size 字体大小
|
|
* @param isBold 是否加粗
|
|
* @return
|
|
*/
|
|
|
|
private static Font getFont(Workbook workbook, short size, boolean isBold) {
|
|
Font font = workbook.createFont();
|
|
//字体样式
|
|
font.setFontName("宋体");
|
|
//是否加粗
|
|
font.setBold(isBold);
|
|
//字体大小
|
|
font.setFontHeightInPoints(size);
|
|
return font;
|
|
}
|
|
}
|
|
|