import java.io.OutputStream;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; /**
* Description: 导出工具类
* All Rights Reserved.
*/
public class ExcelExprot {
@SuppressWarnings("unchecked")
public void exportExcel(HttpServletResponse response, String fileName,
ExcelModel... excelModels) {
// 输出流
OutputStream os = null;
// excel文件
Workbook wb = null;
// excel工作表
Sheet st; try {
os = response.getOutputStream();
if ((fileName.trim().substring(fileName.indexOf(".")))
.equals(".xlsx"))
wb = new XSSFWorkbook();
else
wb = new HSSFWorkbook();
for (ExcelModel excelModel : excelModels) {
if (excelModel.getSheetName() != null
&& excelModel.getSheetName().trim().length() != 0) {
st = wb.createSheet(excelModel.getSheetName());
} else {
st = wb.createSheet();
}
Font font = wb.createFont();
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
// 设置文字蓝色 且剧中
CellStyle styleBlueFontNotWrap = wb.createCellStyle();
styleBlueFontNotWrap
.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
styleBlueFontNotWrap.setFont(font);
styleBlueFontNotWrap.setAlignment(CellStyle.VERTICAL_CENTER);
styleBlueFontNotWrap.setAlignment(CellStyle.ALIGN_CENTER);
styleBlueFontNotWrap.setWrapText(false); Boolean cbFlag = excelModel.getCallBack() != null;
Row row = null;
Cell cell = null;
int rowcursor = 0;
int columncursor = 0;
row = st.createRow(rowcursor);
row.setHeight((short) 500);
for (int i = 0; i < excelModel.getHeaders().length; i++) {
st.setColumnWidth(i, 7000);
columncursor = i;
String value = excelModel.getHeaders()[i];
cell = row.createCell(columncursor);
cell.setCellValue(value);
cell.setCellStyle(styleBlueFontNotWrap);
if (cbFlag) {
excelModel.getCallBack().execute(rowcursor,
columncursor, cell, value);
}
}
rowcursor++;
List<?> datas = excelModel.getDatas();
if (datas != null && datas.size() > 0) {
while (true) {
if (datas.size() + 1 == rowcursor) {
break;
}
row = st.createRow(rowcursor);
Class<?> cls = excelModel.getDataCls();
if (cls.getName().equals("java.util.Map")) {
Map<String, Object> map = (Map<String, Object>) datas
.get(rowcursor - 1);
for (int i = 0; i < excelModel.getBodys().length; i++) {
columncursor = i;
Object value = map
.get(excelModel.getBodys()[i]);
createCell(excelModel, cbFlag, row, rowcursor,
columncursor, value);
}
} else {
Object obj = datas.get(rowcursor - 1);
String[] bodys = excelModel.getBodys();
for (int i = 0; i < bodys.length; i++) {
columncursor = i;
String methodName = "get"
+ bodys[i].substring(0, 1)
.toUpperCase()
+ bodys[i].substring(1);
Method met = cls.getMethod(methodName);
Object value = met.invoke(obj);
createCell(excelModel, cbFlag, row, rowcursor,
columncursor, value);
}
}
rowcursor++;
}
}
} response.setContentType("application/msexcel;charset=UTF-8");
// 定义输出类型
fileName = new String(fileName.getBytes("gb2312"), "ISO-8859-1");
response.setHeader("Content-disposition", "attachment; filename="
+ fileName);
wb.write(os);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (os != null)
os.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
} /**
* <p>Title: exportExcelExtend </p>
* Description: 合并单元格 * @param response
* @param fileName
* @param excelModels
*/
@SuppressWarnings("unchecked")
public void exportExcelExtends(HttpServletResponse response,String fileName, String[] header1,String[] header2,
ExcelModel... excelModels) {
// 输出流
OutputStream os = null;
// excel文件
Workbook wb = null;
// excel工作表
Sheet st; try {
os = response.getOutputStream();
if ((fileName.trim().substring(fileName.indexOf(".")))
.equals(".xlsx"))
wb = new XSSFWorkbook();
else
wb = new HSSFWorkbook();
for (ExcelModel excelModel : excelModels) {
if (excelModel.getSheetName() != null
&& excelModel.getSheetName().trim().length() != 0) {
st = wb.createSheet(excelModel.getSheetName());
} else {
st = wb.createSheet();
}
Font font = wb.createFont();
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
// 设置文字蓝色 且剧中
CellStyle styleBlueFontNotWrap = wb.createCellStyle();
styleBlueFontNotWrap
.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
styleBlueFontNotWrap.setFont(font);
styleBlueFontNotWrap.setAlignment(CellStyle.VERTICAL_CENTER);
styleBlueFontNotWrap.setAlignment(CellStyle.ALIGN_CENTER);
styleBlueFontNotWrap.setWrapText(false); Boolean cbFlag = excelModel.getCallBack() != null;
Row row = null;
Cell cell = null;
int rowcursor = 0;
int columncursor = 0; st.addMergedRegion(new CellRangeAddress(0,1,0,0));
st.addMergedRegion(new CellRangeAddress(0,1,1,1));
st.addMergedRegion(new CellRangeAddress(0,0,2,5));
st.addMergedRegion(new CellRangeAddress(0,0,6,9)); row = st.createRow(rowcursor);
row.setHeight((short) 400);
for (int i = 0; i < header1.length; i++) {
st.setColumnWidth(i, 7000);
columncursor = i;
String value = header1[i];
cell = row.createCell(columncursor);
cell.setCellValue(value);
cell.setCellStyle(styleBlueFontNotWrap);
if (cbFlag) {
excelModel.getCallBack().execute(rowcursor,
columncursor, cell, value);
}
}
rowcursor++;
row = st.createRow(rowcursor);
row.setHeight((short) 400);
for (int i = 1; i < header2.length; i++) {
st.setColumnWidth(i, 7000);
columncursor = i;
String value = header2[i];
cell = row.createCell(columncursor);
cell.setCellValue(value);
cell.setCellStyle(styleBlueFontNotWrap);
if (cbFlag) {
excelModel.getCallBack().execute(rowcursor,
columncursor, cell, value);
}
}
rowcursor++;
List<?> datas = excelModel.getDatas();
if (datas != null && datas.size() > 0) {
while (true) {
if (datas.size() + 2 == rowcursor) {
break;
}
row = st.createRow(rowcursor);
Class<?> cls = excelModel.getDataCls();
if (cls.getName().equals("java.util.Map")) {
Map<String, Object> map = (Map<String, Object>) datas
.get(rowcursor - 2);
for (int i = 0; i < excelModel.getBodys().length; i++) {
columncursor = i;
Object value = map
.get(excelModel.getBodys()[i]);
createCell(excelModel, cbFlag, row, rowcursor,
columncursor, value);
}
} else {
Object obj = datas.get(rowcursor - 2);
String[] bodys = excelModel.getBodys();
for (int i = 0; i < bodys.length; i++) {
columncursor = i;
String methodName = "get"
+ bodys[i].substring(0, 1)
.toUpperCase()
+ bodys[i].substring(1);
Method met = cls.getMethod(methodName);
Object value = met.invoke(obj);
createCell(excelModel, cbFlag, row, rowcursor,
columncursor, value);
}
}
rowcursor++;
}
}
}
response.setContentType("application/msexcel;charset=UTF-8");
// 定义输出类型
fileName = new String(fileName.getBytes("gb2312"), "ISO8859-1");
response.setHeader("Content-disposition", "attachment; filename="
+ fileName);
wb.write(os);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (os != null)
os.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
} private void createCell(ExcelModel excelModel, Boolean cbFlag, Row row,
int rowcursor, int columncursor, Object value) {
if (value != null) {
Cell cell = row.createCell(columncursor);
try {
if (value.getClass().getName().equals("java.util.Date")) {
if (excelModel.getDateFormat() != null) {
SimpleDateFormat df = new SimpleDateFormat(
excelModel.getDateFormat());
cell.setCellValue(df.format((Date) value));
} else {
cell.setCellValue((Date) value);
}
} else if (value.getClass().getName().equals("boolean")
|| value.getClass().getName()
.equals("java.lang.Boolean")) {
cell.setCellValue(Double.valueOf(value.toString()));
} else {
cell.setCellValue(value.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
if (cbFlag) {
excelModel.getCallBack().execute(rowcursor, columncursor, cell,
value);
}
}
}
}
 import org.apache.poi.ss.usermodel.Cell;

 /**
* Description: excel的回调工具类
* All Rights Reserved.
*/
public interface ExcelCallBack {
/**
* Description: 可根据行号 或者列号来操作单元格的数据或者样式 * @param row
* @param column
* @param cell
* @param value
*/
public void execute(int row, int column, Cell cell, Object value);
}
 import java.util.List;

 /**
* Description: excelModel
* All Rights Reserved.
*/
public class ExcelModel {
// sheet 页名称
private String sheetName;
// 头名称数组
private String[] headers;
// 数据顺序 实体类属性或者map的key
private String[] bodys;
// 数据集合
private List<?> datas;
// 数据类型 map 或者实体类
private Class<?> dataCls;
// 回调函数 可以修改对应cell的值 也可以添加样式等
private ExcelCallBack callBack;
// 日期格式
private String dateFormat; public String getSheetName() {
return sheetName;
} public void setSheetName(String sheetName) {
this.sheetName = sheetName;
} public String[] getHeaders() {
return headers;
} public void setHeaders(String[] headers) {
this.headers = headers;
} public void setHeader(String... headers) {
this.headers = headers;
} public String[] getBodys() {
return bodys;
} public void setBodys(String[] bodys) {
this.bodys = bodys;
} public void setBody(String... bodys) {
this.bodys = bodys;
} public ExcelCallBack getCallBack() {
return callBack;
} public void setCallBack(ExcelCallBack callBack) {
this.callBack = callBack;
} public List<?> getDatas() {
return datas;
} public void setDatas(List<?> datas) {
this.datas = datas;
} public Class<?> getDataCls() {
return dataCls;
} public void setDataCls(Class<?> dataCls) {
this.dataCls = dataCls;
} public String getDateFormat() {
return dateFormat;
} public void setDateFormat(String dateFormat) {
this.dateFormat = dateFormat;
}
}
    private String methodName(Result result, String respResult,List<Object> list) {
String period =new SimpleDateFormat("yyyy-MM-dd").format(new Date());
String excelName = null;
ExcelExprot excelExprot = new ExcelExprot();
// 构建参数
ExcelModel excelModel = new ExcelModel(); excelName = "";
excelModel.setSheetName(""); excelModel.setHeader("", "", "", "","");
excelModel.setBody("", "", "", "",""); excelModel.setDatas(list);
excelModel.setDataCls(Object.class);
try {
excelModel.setCallBack(new ExcelCallBack() {
@Override
// 可根据行号 或者列号来操作单元格的数据或者样式
public void execute(int row, int column, Cell cell, Object value) {
Class<?> cls = value.getClass();
if (cls.equals(java.util.Date.class) || cls.equals(java.sql.Timestamp.class)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
cell.setCellValue(sdf.format((Date) value));
}else {
cell.setCellValue(value.toString());
}
}
});
// 调用导出方法 response测试传入null
excelExprot.exportExcel(response, excelName + period + ".xlsx", excelModel);
} catch (Exception e) {
log.error(e.getMessage(),e);
respResult = result.error(e.getMessage());
}
return respResult;
}

导出Excel工具类的更多相关文章

  1. 导入导出Excel工具类ExcelUtil

    前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...

  2. javaEE开发之导出excel工具类

    web开发中,一个系统的普通需求也包含导出excel,一般採用POI做统计报表导出excel. 导出excel工具类: import java.io.FileOutputStream; import ...

  3. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  4. java导出excel工具类

    java导出excel须要使用HSSFWorkbook这个类,须要导入poi-3.6-20091214.jar 工具类调用例如以下: package com.qlwb.business.util; i ...

  5. Java XSSF 导出excel 工具类

    参数解释: title:导出excel标题.headers 导出到excel显示的列头. columns 对应数据库字段 .list 导出数据1.pox中添加依赖 <dependency> ...

  6. 使用POI导出EXCEL工具类并解决导出数据量大的问题

    POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...

  7. JXL导出Excel工具类

    将Excel中的数据读取到List<Map<String, Object>>集合中   package com.mvc.util;   import java.io.File; ...

  8. NPOI导入导出Excel工具类

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Ref ...

  9. 关于Excel导入导出POI工具类

    import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import ...

随机推荐

  1. Mono的CustomConditionAttribute使用

    1.Mono的CustomConditionAttribute使用有诸多的限制,没有在XML中定义来的灵活 2.CustomConditionAttribute定义的子类必须和ExtensionAtt ...

  2. Resharper快捷键汇总

    编辑Ctrl + Space 代码完成 Ctrl + Shift + Space代码完成Ctrl + Alt + Space代码完成Ctrl + P 显示参数信息Alt + Insert 生成构造函数 ...

  3. axure8.0激活

    Licensee:米 业成 (STUDENT)Key:nFmqBBvEqdvbiUjy8NZiyWiRSg3yO+PtZ8c9wdwxWse4WprphvSu9sohAdpNnJK5

  4. centos7部署.net core2.1

    1.centos 7.0及以上服务器 2..NET SDK 安装 2.1 安装 https://www.microsoft.com/net/download/linux-package-manager ...

  5. PhysicalBasedRendering(一)物理篇

    很多人对PBR的理解是存在偏差的,跳不出传统渲染模型的思维圈子,把它理解成一种模拟效果更为精确的算法公式,虽然在某种程度上是对的,但没有看到PBR的本质. PBR是对光在真实世界中与环境交互的一种近似 ...

  6. 文件数据缓存(key-Value)

    为了解决大量数据缓存,消耗内存过多的问题,特别实现了文件缓存:该缓存主要是应用于多存少读的情况,一般我们做缓存是实现将数据放在内存中或者数据库中:放在内存中就会消耗很大内存,尤其在高并发大数据缓存时, ...

  7. tongweb安装后无法启动问题

    安装后执行bin下的启动文件,但是管理界面依然无法打开 1.确认破解的dat文件是否在跟目录下,是否过期 2.如果jdk64位试试下面的方法:JAVA_HOME/jre/lib/ext/下缺少包 su ...

  8. [持续交付实践] Jenkins Pipeline 高可用设计方法

    前言 这篇写好一段时间了,一直也没发布上来,今天稍微整理下了交下作业,部分内容偷懒引用了一些别人的内容.使用Jenkins做持续集成/持续交付,当业务达到一定规模的时候,Jenkins本身就很容易成为 ...

  9. Hive实现交叉二维分析的小语句

    1. 梳理出你要的列和行维度 列维度: 每一周 行维度: 年级 + 学科 + 班型 2. 对数据按周增序进行聚合 (即根据列维度) ,生成list concat_ws 和 collect_list ( ...

  10. python xlrd xlwt

    1.什么是xlrd模块? 2.为什么使用xlrd模块? 3.怎样使用xlrd模块? 1.什么是xlrd模块? ♦python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel, ...