【更新】完成用户导出功能

pull/87/head
xuyuxiang 2023-03-06 14:24:33 +08:00
parent eb7b68e2e5
commit 2f566b2d1a
3 changed files with 292 additions and 48 deletions

View File

@ -0,0 +1,112 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* SnowyAPACHE LICENSE 2.0使
*
* 1.LICENSE
* 2.Snowy
* 3.使使
* 4. https://www.xiaonuo.vip
* 5.xiaonuobase@qq.com
* 6.Snowy https://www.xiaonuo.vip
*/
package vip.xiaonuo.common.excel;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import java.util.ArrayList;
import java.util.List;
/**
* EasyExcel AbstractMergeStrategymerge()
*
* @author xuyuxiang
* @date 2023/3/6 13:21
**/
public class CommonExcelCustomMergeStrategy extends AbstractMergeStrategy {
/**
*
*/
private final List<Integer> exportFieldGroupCountList;
/**
* index
*/
private final Integer targetColumnIndex;
/**
* index
*/
private Integer rowIndex;
/**
* exportDataList
*
* @author xuyuxiang
* @date 2023/3/6 13:23
**/
public CommonExcelCustomMergeStrategy(List<String> exportDataList, Integer targetColumnIndex) {
this.exportFieldGroupCountList = getGroupCountList(exportDataList);
this.targetColumnIndex = targetColumnIndex;
}
@Override
protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
if (null == rowIndex) {
rowIndex = cell.getRowIndex();
}
// 仅从首行以及目标列的单元格开始合并,忽略其他
if (cell.getRowIndex() == rowIndex && cell.getColumnIndex() == targetColumnIndex) {
mergeGroupColumn(sheet);
}
}
private void mergeGroupColumn(Sheet sheet) {
int rowCount = rowIndex;
for (Integer count : exportFieldGroupCountList) {
if(count == 1) {
rowCount += count;
continue ;
}
// 合并单元格
CellRangeAddress cellRangeAddress = new CellRangeAddress(rowCount, rowCount + count - 1, targetColumnIndex, targetColumnIndex);
sheet.addMergedRegionUnsafe(cellRangeAddress);
rowCount += count;
}
}
/*
*
*
* @author xuyuxiang
* @date 2023/3/6 13:23
**/
private List<Integer> getGroupCountList(List<String> exportDataList){
if (CollectionUtils.isEmpty(exportDataList)) {
return new ArrayList<>();
}
List<Integer> groupCountList = new ArrayList<>();
int count = 1;
for (int i = 1; i < exportDataList.size(); i++) {
if (exportDataList.get(i).equals(exportDataList.get(i - 1))) {
count++;
} else {
groupCountList.add(count);
count = 1;
}
}
// 处理完最后一条后
groupCountList.add(count);
return groupCountList;
}
}

View File

@ -14,6 +14,9 @@ package vip.xiaonuo.sys.modular.user.result;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat; import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@ -29,169 +32,216 @@ import java.util.Date;
@Setter @Setter
public class SysUserExportResult { public class SysUserExportResult {
/** 机构分组 */
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 40)
@ExcelProperty({"用户信息", "机构分组"})
private String groupName;
/** 头像 */ /** 头像 */
@ExcelProperty({"基本信息", "头像"}) @ColumnWidth(8)
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "头像"})
private byte[] avatar; private byte[] avatar;
/** 账号 */ /** 账号 */
@ExcelProperty({"基本信息", "账号"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "账号"})
private String account; private String account;
/** 姓名 */ /** 姓名 */
@ExcelProperty({"基本信息", "姓名"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "姓名"})
private String name; private String name;
/** 昵称 */ /** 昵称 */
@ExcelProperty({"基本信息", "昵称"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "昵称"})
private String nickname; private String nickname;
/** 性别 */ /** 性别 */
@ExcelProperty({"基本信息", "性别"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "性别"})
private String gender; private String gender;
/** 年龄 */ /** 年龄 */
@ExcelProperty({"基本信息", "年龄"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "年龄"})
private String age; private String age;
/** 出生日期 */ /** 出生日期 */
@ExcelProperty({"基本信息", "出生日期"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "出生日期"})
private String birthday; private String birthday;
/** 民族 */ /** 民族 */
@ExcelProperty({"基本信息", "民族"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "民族"})
private String nation; private String nation;
/** 籍贯 */ /** 籍贯 */
@ExcelProperty({"基本信息", "籍贯"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "籍贯"})
private String nativePlace; private String nativePlace;
/** 家庭住址 */ /** 家庭住址 */
@ExcelProperty({"基本信息", "家庭住址"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "家庭住址"})
private String homeAddress; private String homeAddress;
/** 通信地址 */ /** 通信地址 */
@ExcelProperty({"基本信息", "通信地址"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "通信地址"})
private String mailingAddress; private String mailingAddress;
/** 证件类型 */ /** 证件类型 */
@ExcelProperty({"基本信息", "证件类型"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "证件类型"})
private String idCardType; private String idCardType;
/** 证件号码 */ /** 证件号码 */
@ExcelProperty({"基本信息", "证件号码"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "证件号码"})
private String idCardNumber; private String idCardNumber;
/** 文化程度 */ /** 文化程度 */
@ExcelProperty({"基本信息", "文化程度"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "文化程度"})
private String cultureLevel; private String cultureLevel;
/** 政治面貌 */ /** 政治面貌 */
@ExcelProperty({"基本信息", "政治面貌"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "政治面貌"})
private String politicalOutlook; private String politicalOutlook;
/** 毕业院校 */ /** 毕业院校 */
@ExcelProperty({"基本信息", "毕业院校"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "毕业院校"})
private String college; private String college;
/** 学历 */ /** 学历 */
@ExcelProperty({"基本信息", "学历"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "学历"})
private String education; private String education;
/** 学制 */ /** 学制 */
@ExcelProperty({"基本信息", "学制"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "学制"})
private String eduLength; private String eduLength;
/** 学位 */ /** 学位 */
@ExcelProperty({"基本信息", "学位"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "学位"})
private String degree; private String degree;
/** 手机 */ /** 手机 */
@ExcelProperty({"基本信息", "手机"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "手机"})
private String phone; private String phone;
/** 邮箱 */ /** 邮箱 */
@ExcelProperty({"基本信息", "邮箱"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "邮箱"})
private String email; private String email;
/** 家庭电话 */ /** 家庭电话 */
@ExcelProperty({"基本信息", "家庭电话"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "家庭电话"})
private String homeTel; private String homeTel;
/** 办公电话 */ /** 办公电话 */
@ExcelProperty({"基本信息", "办公电话"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "办公电话"})
private String officeTel; private String officeTel;
/** 紧急联系人 */ /** 紧急联系人 */
@ExcelProperty({"基本信息", "紧急联系人"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "紧急联系人"})
private String emergencyContact; private String emergencyContact;
/** 紧急联系人电话 */ /** 紧急联系人电话 */
@ExcelProperty({"基本信息", "紧急联系人电话"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "紧急联系人电话"})
private String emergencyPhone; private String emergencyPhone;
/** 紧急联系人地址 */ /** 紧急联系人地址 */
@ExcelProperty({"基本信息", "紧急联系人地址"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
@ExcelProperty({"用户信息", "基本信息", "紧急联系人地址"})
private String emergencyAddress; private String emergencyAddress;
/** 员工编号 */ /** 员工编号 */
@ExcelProperty({"员工信息", "员工编号"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 34)
@ExcelProperty({"用户信息", "员工信息", "员工编号"})
private String empNo; private String empNo;
/** 入职日期 */ /** 入职日期 */
@ExcelProperty({"员工信息", "入职日期"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 34)
@ExcelProperty({"用户信息", "员工信息", "入职日期"})
private String entryDate; private String entryDate;
/** 组织名称 */ /** 组织名称 */
@ExcelProperty({"员工信息", "组织名称"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 34)
@ExcelProperty({"用户信息", "员工信息", "组织名称"})
private String orgName; private String orgName;
/** 职位名称 */ /** 职位名称 */
@ExcelProperty({"员工信息", "职位名称"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 34)
@ExcelProperty({"用户信息", "员工信息", "职位名称"})
private String positionName; private String positionName;
/** 主管名称 */ /** 主管名称 */
@ExcelProperty({"员工信息", "主管名称"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 34)
@ExcelProperty({"用户信息", "员工信息", "主管名称"})
private String directorName; private String directorName;
/** 职级 */ /** 职级 */
@ExcelProperty({"员工信息", "职级"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 34)
@ExcelProperty({"用户信息", "员工信息", "职级"})
private String positionLevel; private String positionLevel;
/** 上次登录ip */ /** 上次登录ip */
@ExcelProperty({"系统信息", "上次登录ip"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
@ExcelProperty({"用户信息", "系统信息", "上次登录ip"})
private String lastLoginIp; private String lastLoginIp;
/** 上次登录地点 */ /** 上次登录地点 */
@ExcelProperty({"系统信息", "上次登录地点"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
@ExcelProperty({"用户信息", "系统信息", "上次登录地点"})
private String lastLoginAddress; private String lastLoginAddress;
/** 上次登录时间 */ /** 上次登录时间 */
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
@DateTimeFormat("yyyy-MM-dd HH:mm:ss") @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
@ExcelProperty({"系统信息", "上次登录时间"}) @ExcelProperty({"用户信息", "系统信息", "上次登录时间"})
private Date lastLoginTime; private Date lastLoginTime;
/** 上次登录设备 */ /** 上次登录设备 */
@ExcelProperty({"系统信息", "上次登录设备"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
@ExcelProperty({"用户信息", "系统信息", "上次登录设备"})
private String lastLoginDevice; private String lastLoginDevice;
/** 最新登录ip */ /** 最新登录ip */
@ExcelProperty({"系统信息", "最新登录ip"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
@ExcelProperty({"用户信息", "系统信息", "最新登录ip"})
private String latestLoginIp; private String latestLoginIp;
/** 最新登录地点 */ /** 最新登录地点 */
@ExcelProperty({"系统信息", "最新登录地点"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
@ExcelProperty({"用户信息", "系统信息", "最新登录地点"})
private String latestLoginAddress; private String latestLoginAddress;
/** 最新登录时间 */ /** 最新登录时间 */
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
@DateTimeFormat("yyyy-MM-dd HH:mm:ss") @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
@ExcelProperty({"系统信息", "最新登录时间"}) @ExcelProperty({"用户信息", "系统信息", "最新登录时间"})
private Date latestLoginTime; private Date latestLoginTime;
/** 最新登录设备 */ /** 最新登录设备 */
@ExcelProperty({"系统信息", "最新登录设备"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
@ExcelProperty({"用户信息", "系统信息", "最新登录设备"})
private String latestLoginDevice; private String latestLoginDevice;
/** 用户状态 */ /** 用户状态 */
@ExcelProperty(value = {"系统信息", "用户状态"}) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
@ExcelProperty({"用户信息", "系统信息", "用户状态"})
private String userStatus; private String userStatus;
} }

View File

@ -35,9 +35,14 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.excel.write.style.row.AbstractRowHeightStyleStrategy;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@ -45,11 +50,13 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fhs.trans.service.impl.TransService; import com.fhs.trans.service.impl.TransService;
import org.apache.poi.ss.usermodel.*;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import vip.xiaonuo.common.cache.CommonCacheOperator; import vip.xiaonuo.common.cache.CommonCacheOperator;
import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.enums.CommonSortOrderEnum;
import vip.xiaonuo.common.excel.CommonExcelCustomMergeStrategy;
import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter; import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
import vip.xiaonuo.common.page.CommonPageRequest; import vip.xiaonuo.common.page.CommonPageRequest;
@ -89,10 +96,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -979,10 +983,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
String fileName = "SNOWY2.0系统B端用户信息清单.xlsx"; String fileName = "SNOWY2.0系统B端用户信息清单.xlsx";
List<SysUser> sysUserList = this.list(queryWrapper); List<SysUser> sysUserList = this.list(queryWrapper);
transService.transBatch(sysUserList); transService.transBatch(sysUserList);
sysUserList = CollectionUtil.sort(sysUserList, Comparator.comparing(SysUser::getOrgId));
List<SysUserExportResult> sysUserExportResultList = sysUserList.stream() List<SysUserExportResult> sysUserExportResultList = sysUserList.stream()
.map(sysUser -> { .map(sysUser -> {
SysUserExportResult sysUserExportResult = new SysUserExportResult(); SysUserExportResult sysUserExportResult = new SysUserExportResult();
BeanUtil.copyProperties(sysUser, sysUserExportResult); BeanUtil.copyProperties(sysUser, sysUserExportResult);
sysUserExportResult.setGroupName(sysUserExportResult.getOrgName());
// 状态枚举转为文字 // 状态枚举转为文字
sysUserExportResult.setUserStatus(sysUserExportResult.getUserStatus() sysUserExportResult.setUserStatus(sysUserExportResult.getUserStatus()
.equalsIgnoreCase(SysUserStatusEnum.ENABLE.getValue())?"正常":"停用"); .equalsIgnoreCase(SysUserStatusEnum.ENABLE.getValue())?"正常":"停用");
@ -993,11 +999,87 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
}).collect(Collectors.toList()); }).collect(Collectors.toList());
// 创建临时文件 // 创建临时文件
tempFile = FileUtil.file(FileUtil.getTmpDir() + FileUtil.FILE_SEPARATOR + fileName); tempFile = FileUtil.file(FileUtil.getTmpDir() + FileUtil.FILE_SEPARATOR + fileName);
// 头的策略
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
WriteFont headWriteFont = new WriteFont();
headWriteFont.setFontHeightInPoints((short) 14);
headWriteCellStyle.setWriteFont(headWriteFont);
// 水平垂直居中
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 内容的策略
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
// 内容背景白色
contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
WriteFont contentWriteFont = new WriteFont();
// 内容字体大小
contentWriteFont.setFontHeightInPoints((short) 12);
contentWriteCellStyle.setWriteFont(contentWriteFont);
//设置边框样式,细实线
contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
// 水平垂直居中
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle,
contentWriteCellStyle);
// 写excel // 写excel
EasyExcel.write(tempFile.getPath(), SysUserExportResult.class) EasyExcel.write(tempFile.getPath(), SysUserExportResult.class)
// 自定义样式
.registerWriteHandler(horizontalCellStyleStrategy)
// 自动列宽 // 自动列宽
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.sheet("用户信息").doWrite(sysUserExportResultList); // 机构分组合并单元格
.registerWriteHandler(new CommonExcelCustomMergeStrategy(sysUserExportResultList.stream().map(SysUserExportResult::getGroupName)
.collect(Collectors.toList()), 0))
// 设置第一行字体
.registerWriteHandler(new CellWriteHandler() {
@Override
public void afterCellDispose(CellWriteHandlerContext context) {
WriteCellData<?> cellData = context.getFirstCellData();
WriteCellStyle writeCellStyle = cellData.getOrCreateStyle();
Integer rowIndex = context.getRowIndex();
if(rowIndex == 0) {
WriteFont headWriteFont = new WriteFont();
headWriteFont.setFontName("宋体");
headWriteFont.setBold(true);
headWriteFont.setFontHeightInPoints((short) 16);
writeCellStyle.setWriteFont(headWriteFont);
}
}
})
// 设置表头行高
.registerWriteHandler(new AbstractRowHeightStyleStrategy() {
@Override
protected void setHeadColumnHeight(Row row, int relativeRowIndex) {
if(relativeRowIndex == 0) {
// 表头第一行
row.setHeightInPoints(34);
} else {
// 表头其他行
row.setHeightInPoints(30);
}
}
@Override
protected void setContentColumnHeight(Row row, int relativeRowIndex) {
// 内容行
row.setHeightInPoints(20);
}
})
.sheet("用户信息")
.doWrite(sysUserExportResultList);
CommonDownloadUtil.download(tempFile, response); CommonDownloadUtil.download(tempFile, response);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();