java 全自动生成Excel之ExcelUtil篇(上一篇的升级版 [针对实体类对象的遍历赋值])
看了上一篇随笔之后可以对本篇有更好的了解!
使用的poi的jar包依然是上一篇的poi-3.17.jar....
import pojo.UserPojo(上一篇里有,这里就不粘贴了!)
不废话了,直接上菜。。。
package util; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row; import pojo.UserPojo; /**
*
* @ClassName: UpdatedExcelUtil
* @Description: 全自动Excel工具类(升级版)
* @date 2018年6月6日
*
*/
public class UpdatedExcelUtil { /**
* @注: 将此方法提取出去可以变成一个工具类
*
* @Description: 得到生成的Excel,并且导出到指定的文件夹中
* @Title: getExcel
* @date 2018-06-06
* @param sqlColumn
* 数据列,对应着你需要的字段(比如:sql里面的字段 "username")
* @param sqlColumnName
* 数据列名,对应着你需要的字段名(比如:sql里面的字段 username的 "用户名称")
* @param 这里我们直接传入list(根据需要传入什么数据---》可以是sql哟,或者其他的什么)
* @param file
* 文件路径
* @return void 返回类型
*
*/
public static void getExcel(String[] sqlColumn, String[] sqlColumnName, List<UserPojo> list, File file) {
// 创建一个Excel
@SuppressWarnings("resource")
HSSFWorkbook wb = new HSSFWorkbook();
// 创建工作表
HSSFSheet sheet = wb.createSheet();
// 创建行
Row row = sheet.createRow(0); // 创建样式
HSSFCellStyle style = wb.createCellStyle();
// style.setDataFormat(format.getFormat("@")); // 居中格式
style.setAlignment(HorizontalAlignment.CENTER); // 创建单元格(生成动态的表头),且让各表头居中显示
// Cell cell=row.createCell(0);
Cell cell = null;
for (int i = 0; i < sqlColumn.length; i++) {
// 创建传入进来的表头的个数
cell = row.createCell((short) i);
// 表头的值就是传入进来的值
cell.setCellValue(sqlColumnName[i]);
sheet.setColumnWidth(i, 20 * 200);// 设置列宽
cell.setCellStyle(style);
} // list 不能为空
if (list != null) {
for (int i = 0; i < list.size(); i++) {
// 一组数据,新增一行
row = sheet.createRow((int) i + 1);
// 得到所有的行 一个result就代表 一行
UserPojo result = list.get(i);
// 创建 Field类,使用反射,得到实体类的属性值
Field[] fl = result.getClass().getDeclaredFields();
// 在有所有的记录基础之上,遍历传入进来的表头,再创建N行
for (int j = 0; j < sqlColumn.length; j++) {
// 创建单元格,根据表头数量对应每行多少单元格数据
cell = row.createCell(j);
// 得到当i=n时,j=n时的UserPojo的第n个属性值
Field f = fl[j];
// 允许反射时访问私有变量
f.setAccessible(true);
Object value;
try {
// 得到当前状态下的实体类属性的值
value = f.get(result);
// 放入对应的单元格内
cell.setCellValue(value.toString());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} }
}
} try {
FileOutputStream fileOutputStreane = new FileOutputStream(file);
wb.write(fileOutputStreane);
fileOutputStreane.flush();
fileOutputStreane.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } /**
*
* @Description: 以实现功能为主,没有分层,一般来说这些应该处于controller里面
* @Title: exproExcel
* @date 2018-06-06 参数
* @return void 返回类型
*
*/
public static void exproExcel() {
File file = new File("D:/" + getFileName() + ".xls");
String[] sqlColumn = { "uid", "uname", "upass", "udate" };
String[] sqlColumnName = { "人员编号", "人员姓名", "登录密码", "注册时间" };
// 将此方法提取出去,可以生成一个util工具类
getExcel(sqlColumn, sqlColumnName, listUser(), file);
} /**
* @Description: 运行测试
* @author WengQuan
* @Title: main
* @date 2018-06-06
* @param args
* 参数
* @return void 返回类型
*
*/
public static void main(String[] args) {
exproExcel();
} /**
* 生成一个以系统时间为文件名的字符串(精确到了毫秒)
*/
public static String getFileName() {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");// 设置日期格式
String nowDataSystem = df.format(new Date());
return nowDataSystem;
} /**
*
* @Description: 一组测试数据
* @Title: listUser
* @date 2018-06-06
* @return 参数
* @return List<UserPojo> 返回类型
*
*/
public static List<UserPojo> listUser() {
List<UserPojo> list = new ArrayList<UserPojo>();
UserPojo up1 = new UserPojo(91, "小明", "xiaoming1", "2018、03、21");
UserPojo up2 = new UserPojo(100, "安妮", "anni", "2018-03-22");
UserPojo up3 = new UserPojo(93, "dinosaurs", "dinosaurs", "2018年03月02日");
list.add(up1);
list.add(up2);
list.add(up3);
return list;
}
}
效果截图:

希望谁看到了哪里有问题可以联系我,提醒我,本人以学习为主。大神请勿喷!
版权声明:本文为博主原创文章,可以转载,但请保留本文地址,谢谢大家!
文章地址: http://www.cnblogs.com/hotspring/
java 全自动生成Excel之ExcelUtil篇(上一篇的升级版 [针对实体类对象的遍历赋值])的更多相关文章
- java 获取实体类对象属性值的方法
在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...
- Hibernate_day02--课程安排_主键生成策略_对实体类crud操作_实体类对象状态
Hibernate_day02 上节内容 今天内容 实体类编写规则 Hibernate主键生成策略 实体类操作 对实体类crud操作 添加操作 根据id查询 修改操作 删除操作 实体类对象状态(概念) ...
- java批量生成excel文件
1.导入用于操作excel的jar,地址:https://pan.baidu.com/s/1qXADRlU 2.生成excel使用的模版文件,地址:https://pan.baidu.com/s/1c ...
- java动态生成excel打包下载
@SuppressWarnings("unchecked") public String batchExport() throws DBException{ @SuppressWa ...
- 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】
之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...
- java中的几种实体类对象(PO,VO,DAO,BO,POJO)
一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象.使用Hibernate来生成PO是不错的选择. 二.VO :(value object) ...
- java反射对实体类取值和赋值
public static void checkDesignerEdit(Object dtos) throws Exception { Class dtosClass = dtos.getClass ...
- java反射对实体类取值和赋值,可以写成通过实体类获取其他元素的数据,很方便哦~~~
项目中需要过滤前面表单页面中传过来的实体类的中的String类型变量的前后空格过滤,由于前几天看过一个其他技术博客的的java反射讲解,非常受益.于是,哈哈哈 public static <T& ...
- java批量生成excel代码分享
package com.test.util; /** * @author ocq * */ import java.io.FileOutputStream; import java.io.IOExce ...
随机推荐
- 构造回文-C++实现
腾讯2017暑期实习生招聘笔试题……做了一个世纪才做出来 //腾讯2017暑期实习生招聘第一道题.做了一个世纪才做出来………………太菜了 /** 题目: 给定一个字符串s,你可以从中删除一些字符,使得 ...
- SpringMVC 上传文件and过滤器
SpringMVC提供了一个MultipartResolver接口用来实现文件上传,并使用Commons FileUpload技术实现了一个该接口的实现类CommonsMultipartResolve ...
- 使用Navicat 创建mysql存储过程,实现日期加流水号序列
目的:使用Navicat 创建mysql存储过程,实现格式为8位日期(年月日)+5位流水号序列. 步骤: 1.打开Navicat 登录数据库,点击导航栏上的函数,如下图: 2.点击新建函数,选择“过程 ...
- 2018年Android面试题含答案--适合中高级(下)
这里是我整理出来的面试题,答案我花了很久的时间.加上我自己的理解整理出来的,作者不易,请谅解.有答案的的:https://xiaozhuanlan.com/topic/6132940875 1.A ...
- java程序连接hive数据库遇到的问题
今天,打算学习一下用hadoop做后台,搭建一个网站,首先第一步便是在本机的eclipse中连接到虚拟机上的hive中,原本以为很简单,但是过程很是艰难.特意做总结 首先hive的版本问题就是一个很大 ...
- C#获取文件版本、文件大小等信息
使用以下C#程序代码可以非常方便地获取Windows系统中任意一个文件(尤其是可执行文件)的文件版本.文件大小.版权.产品名称等信息.所获取到的信息类似于在Windows操作系统中右键点击该文件,然后 ...
- EF 数据库连接约定(Connection String Conventions in Code First)
一个典型的EF应用大多数情况下是一个DbContext的派生类(derived class)来控制,通常可以使用该派生类调用DbContext的构造函数,来控制以下的东西: (1).上下文如何连接到数 ...
- Scope及其子类介绍
之前写的文章: 关于作用域范围Scope Scope及相关的子类如下: 同时有些Scope还继承了Scope.ScopeListener类,如下: 1.StarImportScope及ImportSc ...
- 使用Apache Bench对网站性能进行测试
使用Apache Bench对网站性能进行测试
- Web服务端性能提升实践
随着互联网的不断发展,日常生活中越来越多的需求通过网络来实现,从衣食住行到金融教育,从口袋到身份,人们无时无刻不依赖着网络,而且越来越多的人通过网络来完成自己的需求. 作为直接面对来自客户请求的Web ...