看了上一篇随笔之后可以对本篇有更好的了解!

使用的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篇(上一篇的升级版 [针对实体类对象的遍历赋值])的更多相关文章

  1. java 获取实体类对象属性值的方法

    在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...

  2. Hibernate_day02--课程安排_主键生成策略_对实体类crud操作_实体类对象状态

    Hibernate_day02 上节内容 今天内容 实体类编写规则 Hibernate主键生成策略 实体类操作 对实体类crud操作 添加操作 根据id查询 修改操作 删除操作 实体类对象状态(概念) ...

  3. java批量生成excel文件

    1.导入用于操作excel的jar,地址:https://pan.baidu.com/s/1qXADRlU 2.生成excel使用的模版文件,地址:https://pan.baidu.com/s/1c ...

  4. java动态生成excel打包下载

    @SuppressWarnings("unchecked") public String batchExport() throws DBException{ @SuppressWa ...

  5. 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】

    之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...

  6. java中的几种实体类对象(PO,VO,DAO,BO,POJO)

    一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象.使用Hibernate来生成PO是不错的选择. 二.VO :(value object) ...

  7. java反射对实体类取值和赋值

    public static void checkDesignerEdit(Object dtos) throws Exception { Class dtosClass = dtos.getClass ...

  8. java反射对实体类取值和赋值,可以写成通过实体类获取其他元素的数据,很方便哦~~~

    项目中需要过滤前面表单页面中传过来的实体类的中的String类型变量的前后空格过滤,由于前几天看过一个其他技术博客的的java反射讲解,非常受益.于是,哈哈哈 public static <T& ...

  9. java批量生成excel代码分享

    package com.test.util; /** * @author ocq * */ import java.io.FileOutputStream; import java.io.IOExce ...

随机推荐

  1. Django分页设置

    1. """ 分页组件使用示例: obj = Pagination(request.GET.get('page',1),len(USER_LIST),request.pa ...

  2. Day 41 线程

    进程只能在同一个时间干一件事情,如果想同时干两件或者多件事情,进程就无能为力了. 进程在执行过程中如果阻塞,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行. 一是由于进程是资源的 ...

  3. 简单版nginx lua 完成流量上报于中间件

    本文链接:https://www.cnblogs.com/zhenghongxin/p/9131226.html 公司某些业务下,需要将请求的流量上报于中间件(kafka,rabbitMq等),让st ...

  4. 用node.js写一个简单爬虫,并将数据导出为 excel 文件

    引子 最近折腾node,最开始像无头苍蝇一样到处找资料,然而多数没什么卵用,都在瞎比比.在一阵瞎搞后,我来分享一下初步学习node的三个过程: 1 撸一遍NODE入门,对其有个基本的了解: 2 撸一遍 ...

  5. Swift 里字符串(三)small String

     small string, 只有两个 UInt64 的字,这里面存储了所有的信息. 内存布局如下:  第二个 UInt64 存储了标记位和长度信息,以及部分字符串的值 // Get an int ...

  6. 4. Neural Network

    1. 神经网络 首先引入一些便于稍后讨论的新标记: $L$:代表神经网络层数$S_l$:代表第$l$层处理单元的个数$K$:代表多分类中类别种数 2. 前向传播(forward propagation ...

  7. python学习笔记04-格式化输出

    使用占位符来进行格式化输出 %S %d %f Exit()  程序退出函数

  8. JS: 防抖节流

    防抖节流 防抖(debounce) 先来看看下面的代码: //触发滚动事件,num 就加1 let num = 0; function incNum() { console.log('鼠标滚动中'); ...

  9. thuwc2019总结

    275,是我的自己的估分 而350,是面试线 就发挥而言,这次的发挥相当糟糕,第一天选择全场打暴力而不打签到题正解,第二天因A题思路想偏造成2h额外时间花费.第二题与第三题之间,我选择了难打的第三题而 ...

  10. MySQL密码修改(四)

    一.修改破解MySQL密码 1.1:修改密码 在知道原始密码的情况下 [root@web1 ~]# mysqladmin -uroot -p -S /home/mysql/3307/mysql.soc ...