package com.ruoyi.common.utils;
|
|
import com.alibaba.excel.support.ExcelTypeEnum;
|
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
|
import com.alibaba.excel.write.metadata.style.WriteFont;
|
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
import org.apache.poi.ss.usermodel.BorderStyle;
|
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
import org.apache.poi.ss.usermodel.IndexedColors;
|
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.io.OutputStream;
|
import java.io.UnsupportedEncodingException;
|
import java.net.URLEncoder;
|
import java.nio.charset.StandardCharsets;
|
|
/**
|
*@author: Zou, Yu
|
*@description:
|
*@date: 2023/9/24 0024 13:18
|
**/
|
public class EasyExcelUtils {
|
|
public static HorizontalCellStyleStrategy getStyleStrategy(){
|
return getStyleStrategy(IndexedColors.WHITE);
|
}
|
|
/**
|
* color枚举: IndexedColors
|
* @param color
|
* @return
|
*/
|
public static HorizontalCellStyleStrategy getStyleStrategy(IndexedColors color) {
|
// 头的策略
|
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
|
// 背景设置为灰色
|
headWriteCellStyle.setFillForegroundColor(color.getIndex());
|
WriteFont headWriteFont = new WriteFont();
|
headWriteFont.setFontHeightInPoints((short) 10);
|
// 字体样式
|
headWriteFont.setFontName("宋体");
|
headWriteCellStyle.setWriteFont(headWriteFont);
|
// 自动换行
|
headWriteCellStyle.setWrapped(false);
|
// 水平对齐方式
|
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
|
// 垂直对齐方式
|
headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
// 内容的策略
|
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
|
// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
|
// contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
|
// contentWriteCellStyle.setDataFormat((short) 49);
|
// 背景白色
|
contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
|
WriteFont contentWriteFont = new WriteFont();
|
// 字体大小
|
contentWriteFont.setFontHeightInPoints((short) 11);
|
// 字体样式
|
contentWriteFont.setFontName("宋体");
|
contentWriteCellStyle.setWriteFont(contentWriteFont);
|
// 内容居中对齐
|
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
|
//内容垂直居中
|
contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
//边框设置
|
contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
|
contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
|
contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
|
contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
|
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
|
return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
|
}
|
|
public static HorizontalCellStyleStrategy getStyleFixedStrategy() {
|
// 头的策略
|
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
|
// 背景设置为灰色
|
headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
|
WriteFont headWriteFont = new WriteFont();
|
headWriteFont.setFontHeightInPoints((short) 12);
|
// 字体样式
|
headWriteFont.setFontName("Calibri");
|
headWriteCellStyle.setWriteFont(headWriteFont);
|
// 自动换行
|
headWriteCellStyle.setWrapped(false);
|
// 水平对齐方式
|
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
|
// 垂直对齐方式
|
headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
// 内容的策略
|
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
|
// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
|
// contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
|
// 背景白色
|
contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
|
WriteFont contentWriteFont = new WriteFont();
|
// 字体大小
|
contentWriteFont.setFontHeightInPoints((short) 10);
|
// 字体样式
|
contentWriteFont.setFontName("Calibri");
|
contentWriteCellStyle.setWriteFont(contentWriteFont);
|
// 内容左对齐
|
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
|
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
|
return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
|
}
|
|
public static HorizontalCellStyleStrategy getArveStyleStrategy() {
|
// 头的策略
|
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
|
// 背景设置为
|
headWriteCellStyle.setFillForegroundColor(IndexedColors.BLACK.getIndex());
|
WriteFont headWriteFont = new WriteFont();
|
headWriteFont.setFontHeightInPoints((short) 12);
|
// 字体样式
|
headWriteFont.setFontName("Calibri");
|
headWriteFont.setColor(IndexedColors.WHITE.getIndex());
|
headWriteCellStyle.setWriteFont(headWriteFont);
|
|
headWriteCellStyle.setBorderBottom(BorderStyle.MEDIUM);
|
headWriteCellStyle.setLeftBorderColor(IndexedColors.WHITE.getIndex());
|
headWriteCellStyle.setRightBorderColor(IndexedColors.WHITE.getIndex());
|
// 自动换行
|
headWriteCellStyle.setWrapped(true);
|
// 水平对齐方式
|
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
|
// 垂直对齐方式
|
headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
// 内容的策略
|
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
|
// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
|
// contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
|
// 背景白色
|
contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
|
WriteFont contentWriteFont = new WriteFont();
|
// 字体大小
|
contentWriteFont.setFontHeightInPoints((short) 10);
|
// 字体样式
|
contentWriteFont.setFontName("Calibri");
|
contentWriteCellStyle.setWriteFont(contentWriteFont);
|
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
|
return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
|
}
|
|
/**
|
* 设置response
|
* @param response
|
* @param targetName
|
* @return
|
*/
|
public static OutputStream getResponse(HttpServletResponse response, String targetName) throws IOException {
|
return getResponse(response,targetName,ExcelTypeEnum.XLS.getValue());
|
}
|
|
/**
|
* 设置response
|
* @param response
|
* @param targetName
|
* @param suffix 文件后缀
|
* @return
|
*/
|
public static OutputStream getResponse(HttpServletResponse response, String targetName,String suffix) throws IOException {
|
String fileName;
|
try {
|
fileName = targetName + suffix;
|
fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
|
response.setContentType("application/vnd.ms-excel");
|
response.setHeader("Cache-Control", "no-cache");
|
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
|
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
|
return response.getOutputStream();
|
} catch (UnsupportedEncodingException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
}
|