diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java index 610b6455..2112128a 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java @@ -29,6 +29,11 @@ public @interface Excel */ public String readConverterExp() default ""; + /** + * 导出类型(0数字 1字符串) + */ + public ColumnType cellType() default ColumnType.STRING; + /** * 导出时在excel中每个列的高度 单位为字符 */ @@ -89,4 +94,20 @@ public @interface Excel return this.value; } } + + public enum ColumnType + { + NUMERIC(0), STRING(1); + private final int value; + + ColumnType(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } } \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index 4d6f5110..75264d4f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -17,8 +17,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; import org.apache.poi.hssf.usermodel.HSSFDateUtil; -import org.apache.poi.hssf.usermodel.HSSFFont; -import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined; +import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellType; @@ -29,6 +28,7 @@ import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.VerticalAlignment; @@ -40,6 +40,7 @@ import org.apache.poi.xssf.usermodel.XSSFDataValidation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.annotation.Excel.Type; import com.ruoyi.common.annotation.Excels; import com.ruoyi.common.config.Global; @@ -84,6 +85,11 @@ public class ExcelUtil */ private Sheet sheet; + /** + * 样式列表 + */ + private Map styles; + /** * 导入导出数据列表 */ @@ -376,10 +382,6 @@ public class ExcelUtil { int startNo = index * sheetSize; int endNo = Math.min(startNo + sheetSize, list.size()); - // 写入各条记录,每条记录对应excel表中的一行 - CellStyle cs = wb.createCellStyle(); - cs.setAlignment(HorizontalAlignment.CENTER); - cs.setVerticalAlignment(VerticalAlignment.CENTER); for (int i = startNo; i < endNo; i++) { row = sheet.createRow(i + 1 - startNo); @@ -392,11 +394,55 @@ public class ExcelUtil Excel excel = (Excel) os[1]; // 设置实体类私有属性可访问 field.setAccessible(true); - this.addCell(excel, row, vo, field, column++, cs); + this.addCell(excel, row, vo, field, column++); } } } + /** + * 创建表格样式 + * + * @param wb 工作薄对象 + * @return 样式列表 + */ + private Map createStyles(Workbook wb) + { + // 写入各条记录,每条记录对应excel表中的一行 + Map styles = new HashMap(); + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + style.setFont(dataFont); + styles.put("data", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = wb.createFont(); + headerFont.setFontName("Arial"); + headerFont.setFontHeightInPoints((short) 10); + headerFont.setBold(true); + headerFont.setColor(IndexedColors.WHITE.getIndex()); + style.setFont(headerFont); + styles.put("header", style); + + return styles; + } + /** * 创建单元格 */ @@ -404,45 +450,49 @@ public class ExcelUtil { // 创建列 Cell cell = row.createCell(column); - // 设置列中写入内容为String类型 - cell.setCellType(CellType.STRING); - // 写入列名 + // 写入列信息 cell.setCellValue(attr.name()); - CellStyle cellStyle = createStyle(attr, row, column); - cell.setCellStyle(cellStyle); + setDataValidation(attr, row, column); + cell.setCellStyle(styles.get("header")); return cell; } + /** + * 设置单元格信息 + * + * @param value 单元格值 + * @param attr 注解相关 + * @param cell 单元格信息 + */ + public void setCellVo(Object value, Excel attr, Cell cell) + { + if (ColumnType.STRING == attr.cellType()) + { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix()); + } + else if (ColumnType.NUMERIC == attr.cellType()) + { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(Integer.parseInt(value + "")); + } + } + /** * 创建表格样式 */ - public CellStyle createStyle(Excel attr, Row row, int column) + public void setDataValidation(Excel attr, Row row, int column) { - CellStyle cellStyle = wb.createCellStyle(); - cellStyle.setAlignment(HorizontalAlignment.CENTER); - cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); if (attr.name().indexOf("注:") >= 0) { - Font font = wb.createFont(); - font.setColor(HSSFFont.COLOR_RED); - cellStyle.setFont(font); - cellStyle.setFillForegroundColor(HSSFColorPredefined.YELLOW.getIndex()); sheet.setColumnWidth(column, 6000); } else { - Font font = wb.createFont(); - // 粗体显示 - font.setBold(true); - // 选择需要用到的字体格式 - cellStyle.setFont(font); - cellStyle.setFillForegroundColor(HSSFColorPredefined.LIGHT_YELLOW.getIndex()); // 设置列宽 sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256)); row.setHeight((short) (attr.height() * 20)); } - cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); - cellStyle.setWrapText(true); // 如果设置了提示信息则鼠标放上去提示. if (StringUtils.isNotEmpty(attr.prompt())) { @@ -455,13 +505,12 @@ public class ExcelUtil // 这里默认设了2-101列只能选择不能输入. setXSSFValidation(sheet, attr.combo(), 1, 100, column, column); } - return cellStyle; } /** * 添加单元格 */ - public Cell addCell(Excel attr, Row row, T vo, Field field, int column, CellStyle cs) + public Cell addCell(Excel attr, Row row, T vo, Field field, int column) { Cell cell = null; try @@ -473,7 +522,7 @@ public class ExcelUtil { // 创建cell cell = row.createCell(column); - cell.setCellStyle(cs); + cell.setCellStyle(styles.get("data")); // 用于读取对象中的属性 Object value = getTargetValue(vo, field, attr); @@ -489,9 +538,8 @@ public class ExcelUtil } else { - cell.setCellType(CellType.STRING); - // 如果数据存在就填入,不存在填入空格. - cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix()); + // 设置列类型 + setCellVo(value, attr, cell); } } } @@ -752,6 +800,7 @@ public class ExcelUtil public void createSheet(double sheetNo, int index) { this.sheet = wb.createSheet(); + this.styles = createStyles(wb); // 设置工作表的名称. if (sheetNo == 0) { diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java index ca8a8be3..286555a2 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java @@ -6,6 +6,7 @@ import javax.validation.constraints.*; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.constant.ScheduleConstants; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.utils.StringUtils; @@ -21,7 +22,7 @@ public class SysJob extends BaseEntity implements Serializable private static final long serialVersionUID = 1L; /** 任务ID */ - @Excel(name = "任务序号") + @Excel(name = "任务序号", cellType = ColumnType.NUMERIC) private Long jobId; /** 任务名称 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java index 25d0e692..da884de8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java @@ -4,6 +4,7 @@ import javax.validation.constraints.*; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.core.domain.BaseEntity; /** @@ -16,7 +17,7 @@ public class SysConfig extends BaseEntity private static final long serialVersionUID = 1L; /** 参数主键 */ - @Excel(name = "参数主键") + @Excel(name = "参数主键", cellType = ColumnType.NUMERIC) private Long configId; /** 参数名称 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictData.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictData.java index d87dbee0..4b8146a7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictData.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictData.java @@ -4,6 +4,7 @@ import javax.validation.constraints.*; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.BaseEntity; @@ -17,11 +18,11 @@ public class SysDictData extends BaseEntity private static final long serialVersionUID = 1L; /** 字典编码 */ - @Excel(name = "字典编码") + @Excel(name = "字典编码", cellType = ColumnType.NUMERIC) private Long dictCode; /** 字典排序 */ - @Excel(name = "字典排序") + @Excel(name = "字典排序", cellType = ColumnType.NUMERIC) private Long dictSort; /** 字典标签 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictType.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictType.java index 3b927401..11de732e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictType.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictType.java @@ -4,6 +4,7 @@ import javax.validation.constraints.*; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.core.domain.BaseEntity; /** @@ -16,7 +17,7 @@ public class SysDictType extends BaseEntity private static final long serialVersionUID = 1L; /** 字典主键 */ - @Excel(name = "字典主键") + @Excel(name = "字典主键", cellType = ColumnType.NUMERIC) private Long dictId; /** 字典名称 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java index 9c466c6d..98a39cdc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java @@ -4,6 +4,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import java.util.Date; import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.core.domain.BaseEntity; /** @@ -14,39 +15,39 @@ import com.ruoyi.common.core.domain.BaseEntity; public class SysLogininfor extends BaseEntity { private static final long serialVersionUID = 1L; - + /** ID */ - @Excel(name = "序号") + @Excel(name = "序号", cellType = ColumnType.NUMERIC) private Long infoId; - + /** 用户账号 */ @Excel(name = "用户账号") private String loginName; - + /** 登录状态 0成功 1失败 */ @Excel(name = "登录状态", readConverterExp = "0=成功,1=失败") private String status; - + /** 登录IP地址 */ @Excel(name = "登录地址") private String ipaddr; - + /** 登录地点 */ @Excel(name = "登录地点") private String loginLocation; - + /** 浏览器类型 */ @Excel(name = "浏览器") private String browser; - + /** 操作系统 */ @Excel(name = "操作系统 ") private String os; - + /** 提示消息 */ @Excel(name = "提示消息") private String msg; - + /** 访问时间 */ @Excel(name = "访问时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date loginTime; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java index d735e15a..61250056 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java @@ -4,6 +4,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import java.util.Date; import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.core.domain.BaseEntity; /** @@ -16,7 +17,7 @@ public class SysOperLog extends BaseEntity private static final long serialVersionUID = 1L; /** 日志主键 */ - @Excel(name = "操作序号") + @Excel(name = "操作序号", cellType = ColumnType.NUMERIC) private Long operId; /** 操作模块 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java index f279028a..7a2cb2ba 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java @@ -4,6 +4,7 @@ import javax.validation.constraints.*; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.core.domain.BaseEntity; /** @@ -16,7 +17,7 @@ public class SysPost extends BaseEntity private static final long serialVersionUID = 1L; /** 岗位序号 */ - @Excel(name = "岗位序号") + @Excel(name = "岗位序号", cellType = ColumnType.NUMERIC) private Long postId; /** 岗位编码 */ @@ -28,7 +29,7 @@ public class SysPost extends BaseEntity private String postName; /** 岗位排序 */ - @Excel(name = "岗位排序") + @Excel(name = "岗位排序", cellType = ColumnType.NUMERIC) private String postSort; /** 状态(0正常 1停用) */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRole.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRole.java index c7778f76..a639621d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRole.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRole.java @@ -4,6 +4,7 @@ import javax.validation.constraints.*; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.core.domain.BaseEntity; /** @@ -16,7 +17,7 @@ public class SysRole extends BaseEntity private static final long serialVersionUID = 1L; /** 角色ID */ - @Excel(name = "角色序号") + @Excel(name = "角色序号", cellType = ColumnType.NUMERIC) private Long roleId; /** 角色名称 */ @@ -28,7 +29,7 @@ public class SysRole extends BaseEntity private String roleKey; /** 角色排序 */ - @Excel(name = "角色排序") + @Excel(name = "角色排序", cellType = ColumnType.NUMERIC) private String roleSort; /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限) */ @@ -156,7 +157,6 @@ public class SysRole extends BaseEntity this.deptIds = deptIds; } - @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("roleId", getRoleId()) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUser.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUser.java index 3a3158ee..c1e5ac96 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUser.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUser.java @@ -6,6 +6,7 @@ import javax.validation.constraints.*; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.annotation.Excel.Type; import com.ruoyi.common.annotation.Excels; import com.ruoyi.common.core.domain.BaseEntity; @@ -20,7 +21,7 @@ public class SysUser extends BaseEntity private static final long serialVersionUID = 1L; /** 用户ID */ - @Excel(name = "用户序号", prompt = "用户编号") + @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") private Long userId; /** 部门ID */