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 ...
随机推荐
- Day 6 编码的进阶
https://blog.csdn.net/Deft_MKJing/article/details/79460485 a.ascii码:8位表示一个字符,共可以表示2**8个(即256)字符 , ...
- 629. K Inverse Pairs Array
Given two integers n and k, find how many different arrays consist of numbers from 1 to n such that ...
- KeyChainWrapper - keychain简单使用
1 keyChainWrapper是MRC代码,要禁用ARC -fno-objc-arc 2 要导入Security.framework框架 3 获得一个不变的UUID - (BOOL)applica ...
- 本机的虚拟机执行ifconfig,显示不出ip的解决方法
源于:https://blog.csdn.net/fuweihua123/article/details/78423715?locationNum=4&fps=1 本机的虚拟机执行ifconf ...
- [AIR] AIR程序调用本地默认应用程序打开本地文件
摘要: File类提供了一个方法openWithDefaultApplication可以用本地默认应用程序打开指定路径下的文件. 当我用下面语句的时候,可以成功打开桌面文件夹下面的文件: v ...
- Java并发(一)-了解线程安全
线程不安全性 先来举例说明线程不安全是什么情况下发生的:例如一个变量可以被多个线程进行访问,那么在大量线程并发访问这个变量的情况下,线程执行的顺序会给最后的结果带来不可预估的错误. 先定义一个单例类S ...
- 【13】JMicro微服务-ID生成与Redis
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到12小节 1. 微服务中ID地位 如果说前面小节的功能点是微服务的大脑,那么全局唯一ID则是微服务 ...
- POJ 1129
#include<iostream> #include<stdio.h> #include<string> #define MAXN 60 using namesp ...
- tensorflow初次接触记录,我用python写的tensorflow第一个模型
tensorflow初次接触记录,我用python写的tensorflow第一个模型 刚用python写的tensorflow机器学习代码,训练60000张手写文字图片,多层神经网络学习拟合17000 ...
- (转)AIX光盘备份与恢复
AIX光盘备份与恢复 在此之前,说明一下光盘映像的格式UDF和ISO9660 ISO9660: 这是国际标准化组织(ISO)于1985年颁布的通用光盘文件系统.目前使用最广泛的光盘文件系统,能被所有的 ...