用excel生成java对象_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 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 返回类型

*

*/

public static List listUser() {

List list = new ArrayList();

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;

}

}

效果截图:

aa805eb9c6a2cd421d46cc99eedc5603.png

希望谁看到了哪里有问题可以联系我,提醒我,本人以学习为主。大神请勿喷!

版权声明:本文为博主原创文章,可以转载,但请保留本文地址,谢谢大家!

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

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

Hibernate&lowbar;day02--课程安排&lowbar;主键生成策略&lowbar;对实体类crud操作&lowbar;实体类对象状态

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中的几种实体类对象&lpar;PO&comma;VO&comma;DAO&comma;BO&comma;POJO&rpar;

一.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

java批量生成excel代码分享

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

随机推荐

C&num; webBrowser 开新窗口保持Session&lpar;转&rpar;

首先为项目添加引用 Microsoft Internet Controls public Form1() { InitializeComponent(); this.webBrowser1.Allow ...

solr&plus;mongo-connector&plus;mongdb&plus;tomcat集成

话题:solr安装 一.下载solr 本例采用4.10.3版本. Solr所有版本下载地址:http://archive.apache.org/dist/lucene/solr/ 下载完成后,解压的目 ...

CSS3之动画相关

CSS3动画相关的属性:transform,transition,animation. 变形Transform 语法: transform: rotate | scale | skew | trans ...

11、NFC技术:NDEF Uri格式解析

NDEF Uri格式规范 与NDEF文本格式一样,存储在NFC标签中的Uri也有一定的格式 http://www.nfc-forum.org/specs/spec_dashboard 编写可以解析Ur ...

php字符串函数&lpar;1&rpar;

下面去学习一下php的字符串函数,那么怎么去看手册呢,举个例子 int strcasecmp ( string $str1 , string $str2 ) 第一个int,表示此函数返回的类型是int ...

bzoj(矩阵快速幂)

题意:定义Concatenate(1,N)=1234567……n.比如Concatenate(1,13)=12345678910111213.给定n和m,求Concatenate(1,n)%m. (1 ...

SpringMVC handleMapping 处理器映射器 属性清单

映射器的属性清单 defaultHandler         在映射与所有处理器都不匹配的情况下,指定默认的处理器(处理器即你定义的Controller(action)类) order        ...

How to change from default to alternative Python version on Debian Linux

https://linuxconfig.org/how-to-change-from-default-to-alternative-python-version-on-debian-linux You ...

MVC项目中怎么浏览html页面

public class HomeController : Controller { public ActionResult Index() { //return View(); //return R ...

通信——基于Xmpp协议实现的聊天室

前段时间写了个自定义通信协议的聊天室(即用\r\n标记字符串,作为一句话),总感觉自己弄的那个协议实现虽然简单,但是拓展性就太差了,只适合于发送聊天的内容,难以包含更多的信息.基于上述几点,于是就开始 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值