下面代码实现所需jar包:

  tomcat-embed-core-8.5.11.jar;

  commons-lang3-3.0.1.jar;

  commons-io-2.5.jar;

  poi-3.9.jar

  (下载地址:https://files.cnblogs.com/files/Big-Boss/Java%E5%AF%BC%E5%87%BAExcel%E6%96%87%E4%BB%B6%E6%89%80%E9%9C%80jar%E5%8C%85.zip)

实现代码:

import java.io.ByteArrayOutputStream;
import java.lang.reflect.Field;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
* 导出Excel文件
* 注:考虑到文件兼容性,导出的文件为.xls格式
* @author 【】
*
*/
public class ExportExcelUtil {
/**
* 利用Java反射机制以Excel形式导出数据
* @param objLists 要导出的数据
* @param tableName 要到处数据的实体类bean路径(实体类所在src下的路径)
* @param fileName 要导出的Excel文件名
* @param response
* @throws Exception
*/
public static void exportExcel(List<Object> objLists, String tableName, String fileName,
HttpServletResponse response) throws Exception {
// 利用JAVA反射通过实体类名获取其对应属性(需导出的字段)
Map<String, String> map = getBeanComment(tableName);
List<String> keyList = new ArrayList<>();
keyList.addAll(map.keySet());
// 创建Excel工作薄
HSSFWorkbook wb = new HSSFWorkbook();
// HSSFWorkbook每张Sheet表导出的行数最多为 65535 行
// 当要导出数据大于这个数时就需要多个Sheet表
int flag = 1;
for (int i = 0; i < objLists.size(); i += 65000) {
// 创建Sheet表
HSSFSheet sheet = wb.createSheet("Sheet表名" + flag);
List<Object> lists = new ArrayList<>();
if (objLists.size() - i > 65000) {
lists = objLists.subList(i, i + 10);
} else {
if (objLists.size() > i) {
lists = objLists.subList(i, objLists.size());
}
}
// 定义表头,创建行
HSSFRow row = sheet.createRow(0);
// 单元格样式
HSSFCellStyle style= wb.createCellStyle();
// 水平居中
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 创建单元格
HSSFCell cell = null;
int j = 0;
for (String key : keyList) {
cell = row.createCell(i);
cell.setCellValue(map.get(key));
cell.setCellStyle(style);
j++;
}
for (int k = 0; k < lists.size(); k++) {
// 利用java反射机制获取该类的所有字段信息
Map<String, Field> fieldMap = getFieldMap(lists.get(k));
row = sheet.createRow(k + 1);
j = 0;
for (String key : keyList) {
/*// 字段Field的属性
String name = fieldMap.get(key).getName();
// 字段Field的属性类型
String type = fieldMap.get(key).getType().getName();
System.out.println("属性名:" + name + ",属性类型:" +type);*/
cell = row.createCell(j);
if (fieldMap.get(key).get(lists.get(k)) != null) {
cell.setCellValue(fieldMap.get(key).get(lists.get(k)).toString());
cell.setCellStyle(style);
}
j++;
}
}
flag++;
} //设置文件名后缀
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
//定义导出的表名
String fName = URLEncoder.encode(fileName + sdf.format(new Date()).toString() + ".xls", "UTF-8");
ByteArrayOutputStream os = new ByteArrayOutputStream();
wb.write(os);
if (os.size() > 0) {
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment; filename=" + fName);
response.addHeader("Content-Length", "" + os.size());
IOUtils.write(os.toByteArray(), response.getOutputStream());
response.getOutputStream().flush();
}
os.close();
} /*
* 利用java反射机制获取该类及父类的所有字段信息
*/
public static Map<String, Field> getFieldMap(Object obj) {
Map<String, Field> map = new HashMap<>();
// 所有字段信息
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
map.put(field.getName(), field);
}
//获取其父类所有属性(字段信息)
Field[] superFields = obj.getClass().getSuperclass().getDeclaredFields();
for (Field field : superFields) {
field.setAccessible(true);
map.put(field.getName(), field);
}
return map;
} /*
* 利用JAVA反射通过实体类名获取其对应属性
* @param 实体类所在bean路径(即实体类在src下的路径),例:entity.Student
*/
public static Map<String, String> getBeanComment(String bean) {
Map<String, String> map = new HashMap<>();
try {
Class<?> clz = Class.forName(bean);
Field[] strsSub = clz.getDeclaredFields();
Class<?> clzSuper = Class.forName(bean).getSuperclass();
List<Field> strs = new ArrayList<>();
for (Field filed : strsSub) {
strs.add(filed);
}
if (null != clzSuper) {
Field[] StrsSuper = clzSuper.getDeclaredFields();
for (Field filed : StrsSuper) {
strs.add(filed);
}
}
for (Field field : strs) {
Comment comment = field.getAnnotation(Comment.class);
if (null == comment) {
continue;
}
String name = field.getName();
if ("id".equals(name)) {
continue;
}
if (StringUtils.isNotBlank(comment.value())) {
map.put(name, comment.value());
}
}
return map;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
} /*public static void main(String[] args) throws Exception {
Student stu = new Student();
stu.setName("LOL");
stu.setAge("10");
stu.setSex("待确定");
stu.setStuClass("黑铁班");
Map<String, String> map = getBeanComment("Student");
Set<String> keySet = map.keySet();
Map<String, Field> fMap = getFieldMap(stu);
for (String key : keySet) {
String comValue = map.get(key);
System.out.println(comValue);
// 字段Field的属性
String name = fMap.get(key).getName();
System.out.println("属性名:" + name);
// 字段Field的属性类型
String type = fMap.get(key).getType().getName();
System.out.println("属性类型:" +type);
String value = fMap.get(key).get(stu).toString();
System.out.println("属性值:" + value);
System.out.println("---------------------");
}
}*/
}

Java将数据以Excel文件形式导出后台代码实现的更多相关文章

  1. 将mysql数据库数据以Excel文件的形式导出

    最近在工作中,领导让从数据库中导出一些数据并存放到Excel表格中,网上有许多教程,下面是我总结的其中俩种方法. 从数据库管理工具中导出(navicat) 在navicat导出数据导Excel中还是比 ...

  2. 数据库数据以Excel的方式导出

    import java.io.Serializable; import java.util.List; import com.cfets.cwap.s.util.db.TableColumn; /** ...

  3. PHP中导出Excel,将数据以Excel形式导出

    现在,很多地方都需要导出数据,这里说一种简单的方法将数据以Excel的形式导出,方法如下: <?php date_default_timezone_set('PRC');//设置时区 /*设置h ...

  4. springMVC(4)---生成excel文件并导出

    springMVC(4)---生成excel文件并导出 在开发过程中,需要将数据库中的数据以excel表格的方式导出. 首先说明.我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口, ...

  5. Java生成和操作Excel文件(转载)

    Java生成和操作Excel文件   JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...

  6. Java Struts2 POI创建Excel文件并实现文件下载

    Java Struts2 POI创建Excel文件并实现文件下载2013-09-04 18:53 6059人阅读 评论(1) 收藏 举报 分类: Java EE(49) Struts(6) 版权声明: ...

  7. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  8. Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)

    Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java   版权声明:本 ...

  9. JAVA使用POI读取EXCEL文件的简单model

    一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...

随机推荐

  1. ubuntu中安装hadoop集群

    hadoop是由java 语言编写的主从结构分布式计算存储架构 准备工作: 操作系统: Ubuntu16.04 软件安装包:jdk-8u171-linux-x64.tar.gz : hadoop-2. ...

  2. 公告:CSDN博客积分系统升级(暂行版)

    各位亲爱的用户: CSDN博客频道将于2014年10月22日23点至10月23日8点进行积分系统的升级,升级期间会影响大家的正常訪问和操作.给大家带来不便.敬请广大用户谅解.很多其它详情见>&g ...

  3. 为大家推荐一本书《jQuery Mobile 即学即用》

    这是人民邮电出版社出版的一本面向前端开发者的书. 非常喜欢书名"即学即用"这是每一个程序开发者的理想模式. 不同国家的人有不同的思维方式.这本书的作者是 [阿根廷] Maximil ...

  4. ubuntu14.04 安装LNMP

    新书上市<深入解析Android 5.0系统> 通常我们使用centos来组建LNMP,可是我们开发时多使用ubuntu的桌面版本号来调试,以下将具体介绍怎样在ubuntu上安装一套LNM ...

  5. ASP.NET Razor - C# and VB Code Syntax

    http://www.w3schools.com/aspnet/razor_syntax.asp Razor supports both C# (C sharp) and VB (Visual Bas ...

  6. php的mcrypt

    安装和使用php的mcrypt扩展 程序员们在编写代码程序时,除了要保证代码的高性能之外,还有一点是非常重要的,那就是程序的安全性保障.PHP除了自带的几种加密函数外,还有功能更全面的PHP加密扩展库 ...

  7. [牛客挑战赛 30D] 小A的昆特牌 解题报告 (组合数学)

    interlinkage: https://ac.nowcoder.com/acm/contest/375/D description: solution: 我们枚举步兵的数量$x$,还剩下$S-x$ ...

  8. linux系统在线搭建禅道

    1.先安装wget:yum -y install wget 2.下载安装禅道:[root@zhaowen ~]# wget http://dl.cnezsoft.com/zentao/9.0.1/Ze ...

  9. zgb老师关于java集合的总结

    数组:存多个数据 操作不便集合(Collection ):存多个数据 管理多个数据 提供更为方便的操作Iterator:专门针对集合 进行迭代List:有序的 允许重复的元素ArrayList:底层数 ...

  10. shell 杂集

    1.shell 相等比较注意 -eq 数字相等的比较 == 字符串相等的比较 2.== 和 = 的区别 == 可用于判断变量是否相等,= 除了可用于判断变量是否相等外,还可以表示赋值. = 与 ==  ...