package cc.mrbird.common.util;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import com.csvreader.CsvWriter;
import cc.mrbird.common.annotation.ExportConfig;
import cc.mrbird.common.handler.ExportHandler;
import cc.mrbird.common.util.poi.convert.ExportConvert;
import cc.mrbird.common.util.poi.pojo.ExportItem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExcelUtils {
private Logger log = LoggerFactory.getLogger(this.getClass());
private Class<?> mClass = null;
private HttpServletResponse mResponse = null;
// 分Sheet机制:每个Sheet最多多少条数据
private Integer mMaxSheetRecords = 10000;
// 缓存数据格式器实例,避免多次使用反射进行实例化
private Map<String, ExportConvert> mConvertInstanceCache = new HashMap<>();
protected ExcelUtils() {
}
private ExcelUtils(Class<?> clazz) {
this(clazz, null);
}
private ExcelUtils(Class<?> clazz, HttpServletResponse response) {
this.mResponse = response;
this.mClass = clazz;
}
/**
* 用于生成本地文件
*
* @param clazz 实体Class对象
* @return ExcelUtils
*/
static ExcelUtils builder(Class<?> clazz) {
return new ExcelUtils(clazz);
}
/**
* 用于浏览器导出
*
* @param clazz 实体Class对象
* @param response 原生HttpServletResponse对象
* @return ExcelUtils
*/
public static ExcelUtils export(Class<?> clazz, HttpServletResponse response) {
return new ExcelUtils(clazz, response);
}
/**
* 分Sheet机制:每个Sheet最多多少条数据(默认10000)
*
* @param size 数据条数
* @return this
*/
public ExcelUtils setMaxSheetRecords(Integer size) {
this.mMaxSheetRecords = size;
return this;
}
/**
* 导出Excel(此方式需依赖浏览器实现文件下载,故应先使用export()构造器)
*
* @param data 数据集合
* @param sheetName 工作表名字
* @return true-操作成功,false-操作失败
*/
public boolean toExcel(List<?> data, String sheetName) {
requiredexportParams();
try {
return toExcel(data, sheetName, mResponse.getOutputStream());
} catch (IOException e) {
log.error(e.getMessage());
}
return false;
}
/**
* 针对转换方法的默认实现(提供默认样式和文件命名规则)
*
* @param data 数据集合
* @param sheetName 工作表名字
* @param out 输出流
* @return true-操作成功,false-操作失败
*/
boolean toExcel(List<?> data, String sheetName, OutputStream out) {
return toExcel(data, sheetName, new ExportHandler() {
@Override
public CellStyle headCellStyle(SXSSFWorkbook wb) {
CellStyle cellStyle = wb.createCellStyle();
Font font = wb.createFont();
cellStyle.setFillForegroundColor((short) 12);
cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);// 填充模式
cellStyle.setBorderTop(CellStyle.BORDER_THIN);// 上边框为细边框
cellStyle.setBorderRight(CellStyle.BORDER_THIN);// 右边框为细边框
cellStyle.setBorderBottom(CellStyle.BORDER_THIN);// 下边框为细边框
cellStyle.setBorderLeft(CellStyle.BORDER_THIN);// 左边框为细边框
cellStyle.setAlignment(CellStyle.ALIGN_LEFT);// 对齐
cellStyle.setFillForegroundColor(HSSFColor.GREEN.index);
cellStyle.setFillBackgroundColor(HSSFColor.GREEN.index);
font.setBoldweight(Font.BOLDWEIGHT_NORMAL);
// font.setFontHeightInPoints((short) 12);// 字体大小
font.setColor(HSSFColor.WHITE.index);
// 应用标题字体到标题样式
cellStyle.setFont(font);
return cellStyle;
}
@Override
public String exportFileName(String sheetName) {
return String.format("导出-%s-%s", sheetName, System.currentTimeMillis());
}
}, out);
}
private boolean toExcel(List<?> data, String sheetName, ExportHandler handler, OutputStream out) {
requiredbuilderParams();
if (data == null || data.isEmpty()) {
return false;
}
// 导出列查询。
ExportConfig currentExportConfig;
ExportItem currentExportItem;
List<ExportItem> exportItems = new ArrayList<>();
for (Field field : mClass.getDeclaredFields()) {
currentExportConfig = field.getAnnotation(ExportConfig.class);
if (currentExportConfig != null) {
currentExportItem = new ExportItem().setField(field.getName())
.setDisplay("field".equals(currentExportConfig.value()) ? field.getName()
: currentExportConfig.value())
.setWidth(currentExportConfig.width()).setConvert(currentExportConfig.convert())
.setColor(currentExportConfig.color()).setReplace(currentExportConfig.replace());
exportItems.add(currentExportItem);
}
}
// 创建新的工作薄。
SXSSFWorkbook wb = POIUtils.newSXSSFWorkbook();
double sheetNo = Math.ceil((double) data.size() / mMaxSheetRecords);// 取出一共有多少个sheet.
// =====多sheet生成填充数据=====
int index = 0;
while (index <= (sheetNo == 0.0 ? sheetNo : sheetNo - 1)) {
SXSSFSheet sheet = POIUtils.newSXSSFSheet(wb, sheetName + (index == 0 ? "" : "_" + index));
// 创建表头
SXSSFRow headerRow = POIUtils.newSXSSFRow(sheet, 0);
for (int i = 0; i < exportItems.size(); i++) {
SXSSFCell cell = POIUtils.newSXSSFCell(headerRow, i);
POIUtils.setColumnWidth(sheet, i, exportItems.get(i).getWidth(), exportItems.get(i).getDisplay());
cell.setCellValue(exportItems.get(i).getDisplay());
CellStyle style = handler.headCellStyle(wb);
if (style != null) {
cell.setCellStyle(style);
}
}
SXSSFRow bodyRow;
String cellValue;
SXSSFCell cell;
CellStyle style = wb.createCellStyle();
Font font = wb.createFont();
style.setFont(font);
// 产生数据行
if (!data.isEmpty()) {
int startNo = index * mMaxSheetRecords;
int endNo = Math.min(startNo + mMaxSheetRecords, data.size());
int i = startNo;
while (i < endNo) {
bodyRow = POIUtils.newSXSSFRow(sheet, i + 1 - startNo);
for (int j = 0; j < exportItems.size(); j++) {
// 处理单元格值
cellValue = exportItems.get(j).getReplace();
if ("".equals(cellValue)) {
try {
cellValue = BeanUtils.getProperty(data.get(i), exportItems.get(j).getField());
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
是一个简单高效的后台权限管理系统。项目基础框架采用全新的Java Web开发框架 —— Spring Boot2.0.4,消除了繁杂的XML配置,使得二次开发更为简单;数据访问层采用Mybatis,同时引入了通用Mapper和PageHelper插件,可快速高效的对单表进行增删改查操作,消除了大量传统XML配置SQL的代码;安全框架采用时下流行的Apache Shiro,可实现对按钮级别的权限控制;前端页面使用Bootstrap构建,主题风格为时下Google最新设计语言Material Design,并提供多套配色以供选择。
资源推荐
资源详情
资源评论
收起资源包目录
java 后台权限管理系统 (706个子文件)
ExcelUtils.class 14KB
MenuServiceImpl.class 11KB
UserController.class 10KB
JobServiceImpl.class 10KB
RedisInfo.class 10KB
UserServiceImpl.class 9KB
RedisConfig.class 8KB
RedisServiceImpl.class 8KB
GifEncoder.class 8KB
LogServiceImpl.class 7KB
MenuController.class 7KB
RoleServiceImpl.class 7KB
ShiroConfig.class 7KB
JobController.class 7KB
Quant.class 7KB
SqlStatementInterceptor.class 6KB
RoleController.class 6KB
User.class 6KB
LoginController.class 6KB
HttpUtils.class 6KB
LimitAspect.class 6KB
DeptServiceImpl.class 6KB
DictController.class 6KB
RedisController.class 6KB
DeptController.class 6KB
ScheduleUtils.class 5KB
OneIsAllController.class 5KB
ShiroRealm.class 5KB
XssFilter.class 5KB
POIUtils.class 4KB
JobLogController.class 4KB
LogController.class 4KB
Encoder.class 4KB
TreeUtils.class 4KB
DictServiceImpl.class 4KB
GifCaptcha.class 4KB
Tree.class 4KB
Job.class 4KB
CommonController.class 4KB
FileUtil.class 4KB
ScheduleJob.class 4KB
SessionServiceImpl.class 4KB
Menu.class 4KB
SysLog.class 4KB
BaseService.class 3KB
MovieController.class 3KB
JobLogServiceImpl.class 3KB
JobLog.class 3KB
AddressUtils.class 3KB
SpecCaptcha.class 3KB
LogAspect.class 3KB
BaseController.class 3KB
XssHttpServletRequestWrapper.class 3KB
SessionController.class 3KB
Dict.class 3KB
UserOnline.class 3KB
ArticleController.class 2KB
GlobalExceptionHandler.class 2KB
Role.class 2KB
ShiroProperties.class 2KB
Dept.class 2KB
WebConfig.class 2KB
ScheduleConfig.class 2KB
ExcelUtils$1.class 2KB
FastJsonRedisSerializer.class 2KB
Captcha.class 2KB
WeatherController.class 2KB
ScheduleRunnable.class 2KB
FebsProperties.class 2KB
ResponseBo.class 2KB
SpringContextUtils.class 2KB
MenuService.class 2KB
UserService.class 2KB
ApplicationTest.class 2KB
UserRoleServiceImpl.class 2KB
RoleMenuServiceImpl.class 2KB
CustomUserFilter.class 2KB
ExportItem.class 2KB
Application.class 2KB
Job$ScheduleStatus.class 1KB
FebsConstant.class 1KB
MD5Utils.class 1KB
AsyncExecutorPoolConfig.class 1KB
WulianController.class 1KB
QueryRequest.class 1KB
JsoupUtil.class 1KB
DictService.class 1KB
TimeConvert.class 1KB
DateUtil.class 1KB
IPUtils.class 1KB
Randoms.class 1KB
HttpUtils$TrustAnyTrustManager.class 1KB
LimitType.class 1KB
UserWithRole.class 1KB
RoleWithMenu.class 1KB
JobService.class 1KB
TestTask.class 1KB
UserRole.class 1KB
RoleMenu.class 1KB
RoleService.class 1KB
共 706 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
zhaoxuefu
- 粉丝: 12
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MEM2307-VB一款SOT23封装P-Channel场效应MOS管
- 逐次分半积分实验.wps
- MEM2303XG-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- MEM2303-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 1_base.apk.1
- 基于FPGA深度学习的9I2C 读写 RTC 时钟实验,适合FPGA初学者
- MEM2303M3G-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- MEM2302XG-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- manage.py 相对路径
- 数据库设计课程设计-高校选课管理系统免费提供
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页