- 浏览: 29931 次
- 性别:
- 来自: 四川成都
文章分类
最新评论
-
spilt:
很抱歉 之前评论乱点的 没找到删除的按钮
SSH框架与SpringFramworkMVC -
spilt:
[url][img][url][flash=200,200][ ...
SSH框架与SpringFramworkMVC -
pg_caolei:
楼主你好啊!用spring的MVC开发,比如说利用注解的方式, ...
SSH框架与SpringFramworkMVC
java 用反射和泛型操作Excel
- 博客分类:
- J2EE
package xxxx.util;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFooter;
import org.apache.poi.hssf.usermodel.HSSFHeader;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
* 数据导入导出Excel基类
*
* @author bmladmin
*
* @param <T>
*/
public class ExcelUtil<T> {
private Class<T> entityClass;
private String[] titles;
private InputStream input;
@SuppressWarnings("unused")
private String excelPath;
private HSSFWorkbook hsswork;
// 创建表
private static HSSFSheet hssheet;
// 主键是否是自动增长
private boolean isIncream = true;
private String ceneterName;
private int headLength;
private List<T> list;
/**
* 导出Excel数据的构造方法
*
* @param list要导出的数据
* @param titles标题
* @param entityClass实体类
* @param centerName
* excel的名字
*/
public ExcelUtil(HSSFWorkbook work, List<T> list, String[] titles,
Class<T> entityClass, String centerName) {
this.entityClass = entityClass;
this.titles = titles;
this.ceneterName = centerName;
this.list = list;
this.hsswork = work;
hssheet = hsswork.createSheet(this.ceneterName);
this.headLength = this.titles.length;
}
/**
* 导入Excel数据的构造方法
*
* @param entityClass
* @param input
* @param excelPath
*/
public ExcelUtil(HSSFWorkbook work, Class<T> entityClass,
InputStream input, String excelPath, boolean isIncream) {
this.entityClass = entityClass;
this.input = input;
this.excelPath = excelPath;
this.isIncream = isIncream;
this.hsswork = work;
try {
this.input = new FileInputStream(excelPath);
hsswork = new HSSFWorkbook(this.input);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
hssheet = hsswork.getSheetAt(0);
}
/**
* 导入Excel数据的重载构造方法
*
* @param entityClass
* @param input
* @param excelPath
*/
public ExcelUtil(HSSFWorkbook work, Class<T> entityClass,
InputStream input, String excelPath) {
this.entityClass = entityClass;
this.input = input;
this.excelPath = excelPath;
this.hsswork = work;
try {
this.input = new FileInputStream(excelPath);
hsswork = new HSSFWorkbook(this.input);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
hssheet = hsswork.getSheetAt(0);
}
public ExcelUtil(HSSFWorkbook work, Class<T> entityClass,
InputStream input) {
this.entityClass = entityClass;
this.input = input;
this.hsswork = work;
try {
hsswork = new HSSFWorkbook(this.input);
} catch (IOException e) {
e.printStackTrace();
}
hssheet = hsswork.getSheetAt(0);
}
/**
* 获取Excel中的数据
*
* @return
*/
public List<T> getCells() {
List<T> tlist = null;
int columnlength = hssheet.getPhysicalNumberOfRows();
if (columnlength > 0) {
tlist = new ArrayList<T>();
for (int i = 1; i <= columnlength - 1; i++) {
Map<Integer, Object> objlist = new HashMap<Integer, Object>();
HSSFRow row = hssheet.getRow(i);
int rowlength = row.getPhysicalNumberOfCells();
for (int j = 0; j < rowlength; j++) {
HSSFCell cell = row.getCell(j);
if(cell!=null){
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
objlist.put(j, cell.getRichStringCellValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
objlist.put(j, cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
objlist.put(j, cell.getCellFormula());
break;
}
}
}
tlist.add(setT(objlist));
}
} else {
return null;
}
return tlist;
}
/**
* 获取Excel中的数据
*
* @return
*/
public List<Map<String,Object>> getCells_Title() {
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
int columnlength = hssheet.getPhysicalNumberOfRows();
Map<String, Object> objlist = new HashMap<String, Object>();
if (columnlength > 0) {
for (int i = 1; i <= columnlength - 1; i++) {
HSSFRow row = hssheet.getRow(i);
int rowlength = row.getPhysicalNumberOfCells();
for (int j = 0; j < rowlength; j++) {
HSSFCell cell = row.getCell(j);
String title=this.getCellTitleIndex(j);
if(cell!=null){
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
objlist.put(title, cell.getRichStringCellValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
objlist.put(title, cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
objlist.put(title, cell.getCellFormula());
break;
}
list.add(objlist);
}
}
}
} else {
return null;
}
return list;
}
/**
* 获取Excel中的所有的标题
*
* @return
*/
public List<String> getCellTitle() {
List<String> titlelist=new ArrayList<String>();
HSSFRow row=hssheet.getRow(0);
int s=row.getPhysicalNumberOfCells();
for(int i=0;i<s;i++){
HSSFCell cell=row.getCell(i);
String title=cell.getRichStringCellValue().toString();
int end=title.lastIndexOf("*");
if(end>0){
titlelist.add(title.substring(0,end));
}else{
titlelist.add(title);
}
}
return titlelist;
}
/**
* 获取Excel中的制定的标题
*
* @return
*/
public String getCellTitleIndex(int index) {
HSSFRow row=hssheet.getRow(0);
HSSFCell cell=row.getCell(index);
String title=cell.getRichStringCellValue().toString();
int end=title.lastIndexOf("*");
if(end>0){
return title.substring(0,end);
}else{
return title;
}
}
/**
* 从excel里读取数据后封装为制定的实体类后返回
*
* @param objlist
* @return
*/
@SuppressWarnings("unchecked")
public T setT(Map<Integer, Object> objlist) {
try {
T tobj = entityClass.newInstance();
Class cl = tobj.getClass();
Field[] field = cl.getDeclaredFields();
for (int i = 0; i < field.length; i++) {
if(objlist.get(i)!=null){
String propertyName = field[i].getName();
String methodName = "set"
+ propertyName.substring(0, 1).toUpperCase()
+ propertyName.substring(1, propertyName.length());
Class typeclass = field[i].getType();
Method method = cl.getMethod(methodName,
new Class[] { typeclass });
if (typeclass == String.class) {
method.invoke(tobj, new Object[] {objlist.get(i)
.toString().trim() });
} else if (typeclass == Integer.class) {
if (isIncream == false) {
String intVar = objlist.get(i).toString();
intVar = intVar.replace(".", "#");
String[] netBefor = intVar.split("#");
if (netBefor.length > 1) {
method.invoke(tobj, new Object[] { Integer
.parseInt(netBefor[0]) });
} else {
method.invoke(tobj,
new Object[] { Integer.parseInt(objlist
.get(i).toString().trim()) });
}
}
} else if (typeclass == Double.class) {
method.invoke(tobj, new Object[] { Double
.parseDouble(objlist.get(i).toString()) });
} else if (typeclass == Float.class) {
method.invoke(tobj, new Object[] { Float.parseFloat(objlist
.get(i).toString()) });
} else if (typeclass == Date.class) {
method.invoke(tobj, new Object[] { new SimpleDateFormat(
"yyyy-mm-dd").parse(objlist.get(i).toString()) });
}else if(typeclass==String[].class){
}
}
}
return tobj;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 导出Excel
*
* @param work
* @throws IOException
*/
public void exportExcel(OutputStream os) throws IOException {
hssheet.setGridsPrinted(true);
HSSFFooter footer = hssheet.getFooter();
footer.setRight("page" + HSSFFooter.page() + "of"
+ HSSFFooter.numPages());
hsswork.write(os);
}
/**
* 创建表头
*
*/
private void createHead() {
HSSFHeader head = hssheet.getHeader();
head.setCenter("Excel数据");
HSSFRow row = hssheet.createRow(0);
for (int i = 0; i < this.headLength; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellType(HSSFCell.ENCODING_UTF_16);
HSSFRichTextString richText = new HSSFRichTextString(titles[i]);
cell.setCellValue(richText);
}
}
/**
* 创建行
*
* @param rowList
* @param rowIndex
*/
private void createRow(List<Object> rowList, int rowIndex) {
HSSFRow row = hssheet.createRow(rowIndex);
for (int i = 0; i < rowList.size(); i++) {
HSSFCell cell = row.createCell(i);
cell.setCellType(HSSFCell.ENCODING_UTF_16);
// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
HSSFRichTextString richText;
System.out.println(rowList.get(i));
if (rowList.get(i) != null) {
richText = new HSSFRichTextString(rowList.get(i).toString());
} else {
richText = new HSSFRichTextString("".toString());
}
cell.setCellValue(richText);
}
}
/**
* 创建整个Excel
*
* @throws IllegalAccessException
* @throws InstantiationException
*
*/
@SuppressWarnings("unused")
public void createExcelSheeet() throws InstantiationException,
IllegalAccessException {
createHead();
int tag = 1;
if(list!=null){
for (int i = 0; i < list.size(); i++) {
T t = list.get(i);
try {
List<Object> ectlist = getT(t);
createRow(ectlist, tag);
tag++;
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
}
/**
* 根据类信息获取值
*
* @param tclass
* @return
* @throws IllegalAccessException
* @throws InstantiationException
* @throws NoSuchMethodException
* @throws SecurityException
*/
@SuppressWarnings("unused")
private List<Object> getT(Object obj) throws InstantiationException,
IllegalAccessException, SecurityException, NoSuchMethodException {
List<Object> ectlist = null;
T t = entityClass.newInstance();
Class ec = t.getClass();
Field[] fd = ec.getDeclaredFields();
if (obj != null) {
ectlist = new ArrayList<Object>();
}
for (Field ld : fd) {
String propertyName = ld.getName();
propertyName = "get" + propertyName.substring(0, 1).toUpperCase()
+ propertyName.substring(1, propertyName.length());
Method method = ec.getMethod(propertyName, new Class[] {});
try {
ectlist.add(method.invoke(obj, new Object[] {}));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
return ectlist;
}
private Object getTChildObject(Class<?> obj_class) {
Object obj = null;
try {
obj = obj_class.newInstance();
} catch (InstantiationException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
}
String name = obj_class.getName();
if (isModel(name)) {
Field[] filed = obj_class.getDeclaredFields();
for (Field ld : filed) {
String propertyName = ld.getName();
propertyName = "get"
+ propertyName.substring(0, 1).toUpperCase()
+ propertyName.substring(1, propertyName.length());
try {
Method method = obj_class.getMethod(propertyName,
new Class[] {});
try {
return method.invoke(obj, new Object[] {});
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
return null;
}
private boolean isModel(String modelStr){
if (modelStr != "java.lang.String" && modelStr != "java.lang.Integer"
&& modelStr != "java.lang.Boolean" && modelStr != "java.lang.Double"
&& modelStr != "java.lang.Float") {
return true;
}else{
return false;
}
}
}
发表评论
-
金融ARQC、ARPC验证生成规则
2016-07-06 16:34 8362从2012年从事金融行业的IT开发和实施工作以来,接触最多的就 ... -
spring + hibernate + mysql 事务不回滚
2012-08-15 09:39 962首先声明,这个问题涉及到的数据库是MySQL。 这是个 ... -
NIO ByteBuffer 使用方法
2012-04-13 11:42 905缓冲区分配和包装 在能够读和写之前,必须有一个缓冲区,用静态方 ... -
JAVA操作WebService
2012-03-20 15:53 791我琢磨了下JAVA中的WebService,java中的Web ... -
将web请求的参数全部封装到Map中
2012-03-13 22:29 2128最近有用将用户的请求参数全部封装到Map中,这个可以根据自己的 ... -
SSH框架与SpringFramworkMVC
2011-04-29 10:08 4234一般现在比较流行的是s ...
相关推荐
利用Java反射机制,导入导出excle文件,生成实体类
java 通过反射获取类上注解,方法上注解,注解里的值及方法参数,项目为maven项目。导入时记得选择maven项目
Java 源码反射 auto-resolver-excel-resource
Excel表格操作实用工具类,使用泛型,反射,POI等技术编写的一个Excel表格操作工具类,适用于各种实体封装的报表表格导入导出,下载模板等功能
12反射 是java程序开发的特征之一,允许java程序对自身进行检查,并能直接操作程序的内部属性; instanceof操作符,instanceof.java; 获取类的信息,ViewClassInfoJrame.java; 动态调用类的方法,CallMetod.java; ...
poi解析Excel文件,并反射返回javaBean对象,poi解析Excel文件,并反射返回javaBean对象
全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...
实例92 Java操作Excel文件 237 第11章 Java高级特性 245 实例93 自动装箱与拆箱 245 实例94 for/in循环 247 实例95 参数不确定(可变长参数) 249 实例96 方法改变(协变式返回类型) 251 实例97 静态导入 252...
反射绕过泛型产生泛型擦除 Java8 新特性(函数式接口、静态导入、Optional、Stream、Lambda、新时间类) java IO NIO Netty 简单实现 java并发知识 Lock 和 Condition 的使用 (划重点) Semaphore 的使用 ...
以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型应用和数据库...
泛型技巧系列:用泛型打造可复用的抽象工厂 体验.net2.0的优雅(四):Provider、策略、控制反转和依赖注入 泛型最佳实践 asp.net 2.0下嵌套masterpage页的可视化编辑 C# 2.0与泛型 动态调用对象的属性和方法——...
再比如ASP.Net内置的AJAX解决方案UpdatePanel只在部分要求不高的内网项目中才被使用,因此我们在讲解UpdatePanel的使用和原理之外,把更多的时间放在讲解企业中用的最多的JQuery AJAX解决方案上。 6、B/S系统项目(7...