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

使用的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. 浅谈.NET,C#三层架构(自己总结)

     三层架构 常见架构: 三层(经典) MVC MVVM MVP   开发中常见的23种设计模式: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种: ...

  2. 【cocos2d-x 手游研发----研发思路及感想】

          我半年前进入了目前的这家做教育行业的公司(在此之前一直从事原生态开发手游的迷茫之路),学习是一件很快乐的事情,来到这家公司我有了很多时间去学习,不管是公司业务,还是其他技术相关的.于是开始 ...

  3. Kettle 使用入门

    Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定. 本文介绍一个入门例子:使用Kettle从动态指定的文件名对应的文本文件里抽取 ...

  4. docker 下载加速

    执行这个命令: curl -SSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud. ...

  5. jmeter-linux下运行

    1.2 在命令行下运行脚本 将1.1中的脚本保存,在编辑是随时可以保存,保存后是一个jmx格式的文件(如图),这个就是要在命令行下运行的脚本(作为参数运行).这个脚本文件可以不包含1.1中第四和第五步 ...

  6. ReentrantLock获取到非公平锁的源码

    /** * Performs lock. Try immediate barge, backing up to normal * acquire on failure. */ final void l ...

  7. ThreadLocal模式与synchronized关键字的比较

    ThreadLocal模式与synchronized关键字都是用于处理多线程并发访问变量的问题.只是两者处理问题的角度和思路不同. 1)ThreadLocal是一个Java类,通过对当前线程(Thre ...

  8. C# 程序运行中的流程控制

    1.C#之流程控制语句:计算机程序执行的控制流程由三种基本的控制结构控制,即顺序结构,选择结构,循环结构. 1) 顺序结构:从上到下,按照书写顺序执行每一条语句,不会发生跳跃. 代码段1; // 先执 ...

  9. Swift 学习指引

    以下指引是基于最新的 Swift 4.0 为基础为而言. 如你在参考3.0以下版本, 那你就不要说你会 Swift, 3.0 之前是 Objective-C 的搬迁(80%),是不成熟的语言, 看着很 ...

  10. Eclipse for android 实现代码自动提示智能提示功能

    Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclips ...