下载数据到Excel,工具类
使用反射将model数据下载到Excel中
package test.upload.utils; import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Workbook; /**
* 生成EXCEL的工具类
*
* @author duandingyang
*
*/
public class ExcelUtils { /**
* 生成EXCEL的通用方法
*
* @param filePath 生成EXCEL的地址
* @param clazz 绑定数据的类型
* @param list 数据列表
* @param map EXCEL表头信息
* @throws Exception
*/
public static HSSFWorkbook generateExcel(Class<?> clazz, List<?> list,
Map<String, ExcelTitle> map) throws Exception { HSSFWorkbook wb = new HSSFWorkbook();
CreationHelper helper = wb.getCreationHelper();
HSSFSheet sheet = wb.createSheet("sheet1");
HSSFRow row = sheet.createRow(0);
CellStyle cellStyle = ExcelUtils.createStyleCell(wb);
cellStyle.setFont(ExcelUtils.createFonts(wb));
int i = 0;
for (String attr : map.keySet()) {
sheet.setColumnWidth(i, 5000);
ExcelTitle excelTitle = map.get(attr);
int order = excelTitle.getOrder();
String title = excelTitle.getTitle();
HSSFCell cell = row.createCell(order);
cellStyle = ExcelUtils.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER,
CellStyle.VERTICAL_CENTER);
cellStyle.setWrapText(true);
cell.setCellStyle(cellStyle);
cell.setCellValue(title);
i++;
}
int rowNum = 1;
if (list != null) {
for (Object obj : list) {
row = sheet.createRow(rowNum);
for (String attr : map.keySet()) {
ExcelTitle excelTitle = map.get(attr);
int order = excelTitle.getOrder();
Class<?> type = excelTitle.getType();
String getMethod = "get" + attr.substring(0, 1).toUpperCase()
+ attr.substring(1);
Method method = clazz.getMethod(getMethod, new Class[] {});
Object value = method.invoke(obj, new Object[] {});
HSSFCell cell = row.createCell(order);
if (value != null) {
if (Double.class.equals(type)) {
cellStyle = ExcelUtils.setCellStyleAlignment(cellStyle,
CellStyle.ALIGN_RIGHT, CellStyle.VERTICAL_CENTER);
cellStyle = ExcelUtils.setCellFormat(helper, cellStyle, "#,##0.00");
cell.setCellStyle(cellStyle);
double doubleValue = Double.valueOf(value.toString());
cell.setCellValue(doubleValue);
} else if (Long.class.equals(type)) {
cellStyle = ExcelUtils.setCellStyleAlignment(cellStyle,
CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
cell.setCellStyle(cellStyle);
long longValue = Long.valueOf(value.toString());
cell.setCellValue(longValue);
} else if (String.class.equals(type)) {
// cellStyle = ExcelUtils.setCellStyleAlignment(cellStyle,
// CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
// cell.setCellStyle(cellStyle);
cellStyle.setWrapText(true);
cell.setCellStyle(cellStyle);
cell.setCellValue(new HSSFRichTextString(value.toString()));
} else if (Date.class.equals(type)) {
// TODO 处理时间
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String ctime = format.format(value);
cell.setCellValue(ctime);
}
else if (BigDecimal.class.equals(type)) {
BigDecimal bigDecimal=(BigDecimal) value;
String bigDecimalValue = bigDecimal.toString();
cell.setCellValue(bigDecimalValue);
}else if(Integer.class.equals(type)){
if(value != null){
cell.setCellValue(Integer.parseInt((value.toString())));
}
}
}
}
rowNum++;
}
}
return wb;
} public static CellStyle createStyleCell(Workbook wb) {
CellStyle cellStyle = wb.createCellStyle();
// // 设置一个单元格边框颜色
// cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
// cellStyle.setBorderTop(CellStyle.BORDER_THIN);
// cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
// cellStyle.setBorderRight(CellStyle.BORDER_THIN);
// // 设置一个单元格边框颜色
// cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
// cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
// cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
// cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex()); return cellStyle;
} /**
* 设置文字在单元格里面的位置 CellStyle.ALIGN_CENTER CellStyle.VERTICAL_CENTER
*
* @param cellStyle
* @param halign
* @param valign
* @return
*/
public static CellStyle setCellStyleAlignment(CellStyle cellStyle, short halign, short valign) {
// 设置上下
cellStyle.setAlignment(halign);
// 设置左右
cellStyle.setVerticalAlignment(valign);
return cellStyle;
} /**
* 格式化单元格 如#,##0.00,m/d/yy去HSSFDataFormat或XSSFDataFormat里面找
*
* @param cellStyle
* @param fmt
* @return
*/
public static CellStyle setCellFormat(CreationHelper helper, CellStyle cellStyle, String fmt) {
// 还可以用其它方法创建format
cellStyle.setDataFormat(helper.createDataFormat().getFormat(fmt));
return cellStyle;
} /**
* 设置字体
*
* @param wb
* @return
*/
public static Font createFonts(Workbook wb) {
// 创建Font对象
Font font = wb.createFont();
// 设置字体
font.setFontName("微软雅黑");
// 着色
font.setColor(HSSFColor.BLACK.index);
return font;
} /**
* 生成EXCEL通用方法使用的表头类
*
* @author cuijianxing
*
*/
public static class ExcelTitle { private int order; private Class<?> type; private String title; public int getOrder() {
return order;
} public void setOrder(int order) {
this.order = order;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public Class<?> getType() {
return type;
} public void setType(Class<?> type) {
this.type = type;
} public ExcelTitle(int order, Class<?> type, String title) {
super();
this.order = order;
this.type = type;
this.title = title;
} }
}
controller层:
@RequestMapping(value = "/downloadUserData", method = RequestMethod.GET)
public void downloadUserData(HttpServletRequest request,
HttpServletResponse response) {
response.setContentType("application/x-excel");
response.setHeader("content-disposition", "attachment;filename="
+ "UserData.xls");
response.setCharacterEncoding("UTF-8");
List<User> users = userService.getUserList();
Map<String, ExcelUtils.ExcelTitle> titleMap = this.getExcelTitleMap();
OutputStream ouputStream = null;
try {
HSSFWorkbook workBook = ExcelUtils.generateExcel(User.class, users,
titleMap);
ouputStream = response.getOutputStream();
workBook.write(ouputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ouputStream.flush();
ouputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} private Map<String, ExcelUtils.ExcelTitle> getExcelTitleMap() {
Map<String, ExcelUtils.ExcelTitle> titleMap = new HashMap<String, ExcelUtils.ExcelTitle>(); ExcelUtils.ExcelTitle excelTitle0 = new ExcelUtils.ExcelTitle(0,
String.class, "序号");
titleMap.put("id", excelTitle0); ExcelUtils.ExcelTitle excelTitle1 = new ExcelUtils.ExcelTitle(1,
String.class, "姓名");
titleMap.put("name", excelTitle1); ExcelUtils.ExcelTitle excelTitle2 = new ExcelUtils.ExcelTitle(2,
String.class, "电话");
titleMap.put("phone", excelTitle2); ExcelUtils.ExcelTitle excelTitle3 = new ExcelUtils.ExcelTitle(2,
String.class, "地址");
titleMap.put("address", excelTitle3); return titleMap;
}
代码下载:
https://github.com/vincentduan/UploadExcel.git
下载数据到Excel,工具类的更多相关文章
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...
- Python Excel工具类封装, 给excel表头搞点颜色
封装Excel工具类 我们常用的excel工具类,读有xlrd,写有xlwt.有读有写,新一代库有pandas,openpyxl等等. 大家用法都差不多,今天博主就介绍新手最爱,我也爱的xlrd和xl ...
- excel工具类
excel工具类 import com.iport.framework.util.ValidateUtil; import org.apache.commons.lang3.StringUtils; ...
- 导入导出Excel工具类ExcelUtil
前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...
- 自己封装的poi操作Excel工具类
自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...
- java 解析excel工具类
java 解析excel工具类 CreateTime--2018年3月5日16:48:08 Author:Marydon ReadExcelUtils.java import java.io.Fi ...
- Java解析Excel工具类(兼容xls和xlsx)
依赖jar <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml&l ...
- java里poi操作Excel工具类【我改】
参考原文: https://www.cnblogs.com/yizhang/p/7244917.html 我改: package test; import java.io.File; import j ...
- java操作excel 工具类
java操作excel 可参考https://blog.csdn.net/xunwei0303/article/details/53213130 直接上代码: 一.java生成excel文件: pac ...
- javaEE开发之导出excel工具类
web开发中,一个系统的普通需求也包含导出excel,一般採用POI做统计报表导出excel. 导出excel工具类: import java.io.FileOutputStream; import ...
随机推荐
- dede网站目录权限设置
如果你的网站数据十分重要(那种两天就能弄好的垃圾站就算了),建议按本文所说的安全步骤进行严格的设置.1.目录权限 我们不建议用户把栏目目录设置在根目录, 原因是这样进行安全设置会十分的麻烦, 在默认的 ...
- Linux OpenGL 实践篇-10-framebuffer
在之前的实践中我们都是在当前的窗口中渲染,即使用的缓存都是由glutCreateWindow时创建的缓存,我们可称之为默认缓存.它是唯一一个可以被图形服务器的显示系统识别的帧缓存,我们在屏幕上看到的只 ...
- subprocess使用小方法
import subprocess def create_process(cmd): p = subprocess.Popen(cmd, shell=True, stdout=subp ...
- Android(java)学习笔记172:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)
1. 接口 接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法 2. 利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下: (1)这里MainActivity.j ...
- Socket网络编程初探
http://altboy.blog.51cto.com/5440160/1921720 客户端/服务器架构 即C/S架构,其实web服务在某种意义上也算是C/S架构 一个特点是服务器端持续运行对外提 ...
- Architecture:架构 元素与关系
http://www.iso-architecture.org/42010/cm/ Systems have architectures. In the Standard, the architect ...
- (四)docker创建私人仓库
(一) 简介 仓库(Repository)是集中存放镜像的地方.仓库可以 被认为是一个具体的项目或目录.例如对于仓库地址 docker.sina.com.cn/centos:centos63 来说,d ...
- element-ui date-picker 设置结束时间大于等于开始时间且开始时间小于等于结束时间
Part.1 问题 date-picker 组件在使用时,默认对时间是没有限制的,可以随便选择区间,官方文档添加了快捷选项,如:一周丶一月... 但是从用户体验方面出发,我们还是希望对时间进行有利的 ...
- 环球影城母公司:务必阻止复仇者和 X 战警团聚
今日导读 去年 12 月,迪士尼宣布收购 21 世纪福克斯后,许多漫威粉丝们马上欢呼:复仇者终于可以和 X 战警团聚了!然而,超级英雄大团圆这个美好景象恐怕不会那么容易实现.就在近日,环球影城母公司— ...
- HTML 5 <a> 标签
href 属性 定义和用法 href 属性规定链接的目标地址. 如果未使用 href 属性,则 <a> 标签不是链接,而是链接的占位符. HTML 4.01 与 HTML 5 之间的差异 ...