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 ...
随机推荐
- Javassist简介
Javassist是一个开源的分析.编辑和创建Java字节码的类库.是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的.它已加入了开放源代码JBoss 应用服务器 ...
- 20164317《网络对抗技术》Exp1 PC平台逆向破解
实验目的: 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getSh ...
- Python3.5 学习十二 数据库介绍
MYSQL介绍: 主流三种数据库:Oracle.Mysql.Sqlserver Mysql安装和启动: windows 1安装 2启动服务 3进入bin目录,打开命令行 4 mysqladmin -u ...
- 深度优先搜索 - 简单demo
输入一个数n,输出 1 ~ n 的全排列,例如输入 3,全排列则为:123,132,213,231,312,321 一共六种. 这里采用深度优先搜索来解决这个问题: #include<stdio ...
- Text and Binary modes
http://perlmaven.com/what-is-a-text-file https://cygwin.com/cygwin-ug-net/using-textbinary.html Text ...
- D03——C语言基础学习PYTHON
C语言基础学习PYTHON——基础学习D03 20180804内容纲要: 1 函数的基本概念 2 函数的参数 3 函数的全局变量与局部变量 4 函数的返回值 5 递归函数 6 高阶函数 7 匿名函数 ...
- 如何将Excel导入到Mysql数据库中
1.在mysql中建一张和Excel结构一样的表,或者修改excel信息,将excel的结构与mysql中table保持一致,包括字段名称. 2.利用mysql客户端工具navicat进行导入. 步骤 ...
- POJ 1163
#include<iostream> #include<stdio.h> #include<algorithm> using namespace std; int ...
- rabbitmq系列二 之工作队列
---恢复内容开始--- 1.工作队列的简介 在上一篇中,我们已经写了一个从已知队列中发送和获取消息的程序,在这里,我们创建一个工作队列(work queue), 会发送一些耗时的任务给多个工作者.模 ...
- Python shutil模块(目录和文件操作)
import shutil #导入shutil模块 copyfileobj方法 将类文件对象fsrc的内容复制到类文件对象fdst shutil.copyfileobj(fsrc, fdst[, le ...