|
|
@@ -0,0 +1,105 @@
|
|
|
+package com.hotent.util;
|
|
|
+
|
|
|
+import org.apache.poi.ss.usermodel.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Excel样式工具类
|
|
|
+ */
|
|
|
+public class ExcelStyleUtil {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建标题样式(大标题,居中,加粗,16号字体)
|
|
|
+ */
|
|
|
+ public static CellStyle createTitleStyle(Workbook workbook) {
|
|
|
+ CellStyle style = workbook.createCellStyle();
|
|
|
+ Font font = workbook.createFont();
|
|
|
+ font.setBold(true);
|
|
|
+ font.setFontHeightInPoints((short) 16);
|
|
|
+ style.setFont(font);
|
|
|
+ style.setAlignment(HorizontalAlignment.CENTER);
|
|
|
+ style.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
+ return style;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建表头样式(居中,加粗,带边框,灰色背景)
|
|
|
+ */
|
|
|
+ public static CellStyle createHeaderStyle(Workbook workbook) {
|
|
|
+ CellStyle style = workbook.createCellStyle();
|
|
|
+ Font font = workbook.createFont();
|
|
|
+ font.setBold(true);
|
|
|
+ style.setFont(font);
|
|
|
+ style.setAlignment(HorizontalAlignment.CENTER);
|
|
|
+ style.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
+ style.setBorderTop(BorderStyle.THIN);
|
|
|
+ style.setBorderBottom(BorderStyle.THIN);
|
|
|
+ style.setBorderLeft(BorderStyle.THIN);
|
|
|
+ style.setBorderRight(BorderStyle.THIN);
|
|
|
+ style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
|
|
|
+ style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
|
|
+ return style;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建数据样式(左对齐,带边框)
|
|
|
+ */
|
|
|
+ public static CellStyle createDataStyle(Workbook workbook) {
|
|
|
+ CellStyle style = workbook.createCellStyle();
|
|
|
+ style.setAlignment(HorizontalAlignment.LEFT);
|
|
|
+ style.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
+ style.setBorderTop(BorderStyle.THIN);
|
|
|
+ style.setBorderBottom(BorderStyle.THIN);
|
|
|
+ style.setBorderLeft(BorderStyle.THIN);
|
|
|
+ style.setBorderRight(BorderStyle.THIN);
|
|
|
+ return style;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建数据样式(居中对齐,带边框)
|
|
|
+ */
|
|
|
+ public static CellStyle createCenterDataStyle(Workbook workbook) {
|
|
|
+ CellStyle style = workbook.createCellStyle();
|
|
|
+ style.setAlignment(HorizontalAlignment.CENTER);
|
|
|
+ style.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
+ style.setBorderTop(BorderStyle.THIN);
|
|
|
+ style.setBorderBottom(BorderStyle.THIN);
|
|
|
+ style.setBorderLeft(BorderStyle.THIN);
|
|
|
+ style.setBorderRight(BorderStyle.THIN);
|
|
|
+ return style;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建数字数据样式(右对齐,带边框)
|
|
|
+ */
|
|
|
+ public static CellStyle createNumberDataStyle(Workbook workbook) {
|
|
|
+ CellStyle style = workbook.createCellStyle();
|
|
|
+ style.setAlignment(HorizontalAlignment.RIGHT);
|
|
|
+ style.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
+ style.setBorderTop(BorderStyle.THIN);
|
|
|
+ style.setBorderBottom(BorderStyle.THIN);
|
|
|
+ style.setBorderLeft(BorderStyle.THIN);
|
|
|
+ style.setBorderRight(BorderStyle.THIN);
|
|
|
+ return style;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算字符串的显示宽度(中文字符按2个字符宽度计算)
|
|
|
+ * @param text 要计算的字符串
|
|
|
+ * @return 字符宽度
|
|
|
+ */
|
|
|
+ public static int calculateCharWidth(String text) {
|
|
|
+ if (text == null || text.isEmpty()) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ int width = 0;
|
|
|
+ for (char c : text.toCharArray()) {
|
|
|
+ // 中文字符、全角字符按2个字符宽度计算
|
|
|
+ if (c >= '\u4e00' && c <= '\u9fa5' || c >= '\uff00' && c <= '\uffef') {
|
|
|
+ width += 2;
|
|
|
+ } else {
|
|
|
+ width += 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return width;
|
|
|
+ }
|
|
|
+}
|