一个Excel转换Java集合的工具类
来源:互联网 发布:手机app界面设计软件 编辑:程序博客网 时间:2024/05/19 02:31
import java.io.FileInputStream; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.Properties; import org.apache.commons.beanutils.BeanUtils; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import com.tarena.crm.entity.CustomerProxy; public class ExcelToCollectionUtil { /** * Logger for this class */ private static final Logger logger = Logger .getLogger(ExcelToCollectionUtil.class); /** * Excel和对象成员的映射集合. */ private Properties pro; /** * Excel封装对象. */ private HSSFWorkbook hb; /** * 坏数据静态异常类. */ public static class ExcelBadRecordException extends Exception{ private StringBuilder ms=new StringBuilder(); private boolean flag=false; public void addMessage(String s){ flag=true; ms.append(s+"\n"); } public ExcelBadRecordException(){ super(); } @Override public String getMessage() { return ms.toString(); } public boolean hasError(){ return flag; } } private ExcelBadRecordException exception=new ExcelBadRecordException(); /** * 集合中所存储的对象类型. */ private Class clazz; public ExcelToCollectionUtil(Properties pro, HSSFWorkbook hb, Class clazz) { super(); this.pro = pro; this.hb = hb; this.clazz = clazz; } /** * 从Excel导入到Collection */ public Collection toCollection() { Collection table=new ArrayList(); //保存数据的集合 HSSFSheet sheet = hb.getSheetAt(0); //得到第一个sheet , 应该改进成可以选择的. HSSFRow head = sheet.getRow(0); //得到第一行表头 for (int i = 1;; i++) { HSSFRow row = sheet.getRow(i); //得到一行记录 if(row==null) //判断是否为最后记录, 应该判断记录是否有效. break; Object object=null; try { object = this.exchangObjectFromRow(head, row); //通过一条记录产生一个对象 } catch (Exception e) { //遇到无效的数据跳过 Exception ee=new Exception("第"+i+"条记录格式有错误!",e); exception.addMessage(ee.getMessage()); //将无效记录异常内容存在ExcelBadRecordException对象里 continue; } table.add(object); //将产生的对象存入集合中 } return table; } /** * 抛出无效数据异常. * @throws ExcelBadRecordException */ public void showException() throws ExcelBadRecordException{ if(exception.hasError()){ throw exception; } } /** * 将一个row对象数据转换成javabean对象. * @param head * @param row * @return * @throws InvocationTargetException * @throws IllegalAccessException */ private Object exchangObjectFromRow(HSSFRow head,HSSFRow row) throws Exception{ StringBuilder sb = new StringBuilder(); Object object=this.newInstance(clazz); if(row.getCell((short)0)==null){ throw new Exception("第一列单元格没有数据."); } for (int j = 0;; j++) { HSSFCell cell = row.getCell((short) j); //得到一个单元格. if (cell == null) break; String attribute=head.getCell((short)j).getRichStringCellValue().getString(); // 得到Excel中该列列名. String property=pro.getProperty(attribute); // 从Properties中得到对应的成员名 Object value=null; //成员对象 if(property==null||property.equals("")||attribute.equals("")) //防止有没有对应的字段映射 continue; switch (cell.getCellType()) { // 判断单元格的数据类型,做不同处理. case HSSFCell.CELL_TYPE_STRING: //判断是字符串类型 value=cell.getRichStringCellValue().getString(); // 得到对象的成员对象. break; case HSSFCell.CELL_TYPE_NUMERIC: //判断是数字类型 if(HSSFDateUtil.isCellDateFormatted(cell)){ //判断是标准日期类型(1996-1-1) value=cell.getDateCellValue(); // 得到对象的成员对象. }else{ value=new Double(cell.getNumericCellValue()).longValue(); } break; default: logger.error("excel里非字符串和数字的类型."); } sb.append(property+"="+value); sb.append(" "); BeanUtils.setProperty(object,property,value); } if (logger.isDebugEnabled()) { //logger.debug(clazz.getSimpleName()+"[" + sb.toString() + "]"); logger.debug(BeanUtils.describe(object)); } return object; } /** * 创建对象. * @param clazz * @return */ private Object newInstance(Class clazz){ try{ return clazz.newInstance(); }catch(Exception e){ logger.error(e.getMessage()); } return null; } public static void main(String[] args) throws Exception { HSSFWorkbook book = new HSSFWorkbook(new FileInputStream("e:\\project\\test.xls")); Properties pro=new Properties(); pro.load(ExcelToCollectionUtil.class.getClassLoader().getResourceAsStream("CustomerProxy.properties")); ExcelToCollectionUtil util = new ExcelToCollectionUtil(pro, book, CustomerProxy.class); Collection col=util.toCollection(); Iterator it=col.iterator(); while(it.hasNext()){ CustomerProxy con=(CustomerProxy) it.next(); System.out.println(con.getName()+" "+con.getValidStateString()+" "+con.getGradeString()+" "+con.getRegisterConsultantString()); } util.showException(); } }
0 0
- 一个Excel转换Java集合的工具类
- 一个工具类-----集合的交并差
- 分享一个导出excel的工具类
- Java 集合 转换成 Json格式 字符串 工具类
- 利用泛型和反射对Java对象集合转换成Json的工具类
- 一个通用的java集合和json互转的工具类
- 一个转换日期的工具类
- Java中集合(七)Collections 一个操作集合的工具类
- java集合工具类
- Java工具类集合
- JAVA-集合工具类
- java集合工具类
- #.Java集合工具类
- java excel工具类
- java开发工具类的集合
- Java 操作集合的工具类:Collections
- java集合常用的工具类
- Java 集合,Collections工具类的用法
- MATLAB中常用的排列、组合与阶乘等函数
- 客户端项目开发流程
- OpenStack Nova: Boot From Volume
- OSX:App Store下载到哪里去了?
- android调用系统相机实现拍照功能
- 一个Excel转换Java集合的工具类
- 数据结构算法,通用控制台完善
- HDU 4438 Hunters(模拟)
- 防止内存泄露的一些Tips
- 指向学生类的指针
- 第三章作业(后)
- test Week 5
- 黑马程序员_泛型
- IOS Foundation框架基本类库的使用