java 读取excel

来源:互联网 发布:springboot配置端口号 编辑:程序博客网 时间:2024/04/29 21:03
package com.icss.mdm.maintain.data;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileReader;import java.io.IOException;import java.io.InputStream;import java.lang.reflect.Field;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.Statement;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.beanutils.BeanUtils;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;import com.icss.mdm.vo.MdmCodepropVO;import com.icss.pangu.db.DBBeanBase;import com.icss.pangu.logging.Log;import com.icss.pangu.logging.LogFactory;public class ReadExcel {private static Log log = LogFactory.getLog(ReadTxt.class);public static Object[] getExcelList(String id, DBBeanBase dbBase, String roleCode,String status, String ignore, Object[] addTag,String filePath,String personName) {        int count = 1;        int propLength = 0;        String codeID = "";        String code = "";        String value = "";        String s1 = null;        FileReader reader = null;        FileReader reader1 = null;        BufferedReader br = null;        BufferedReader br1 = null;        List list = new ArrayList();        String[] columnValue = null;        String[] propValue = null;        String[] codeValue = new String[50];        int row = 0 ;        // 记录应该添加几次        int timer = 0 ;        // 记录是第几次执行添加        int timers = 0;        // 记录如果不能被整除的时候最后一次是多少条数据        int timecount = 0 ;        try {            InputStream is = new FileInputStream(filePath);            HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(is));            HSSFSheet sheet = wb.getSheetAt(0);            int firstRowNum = sheet.getFirstRowNum();            int lastRowNum = sheet.getLastRowNum();            // 取得文件行数            row = lastRowNum + 1;            if((row - 3)% ErrorTypes.NUM_COUNT == 0)                timer = (row - 3) / ErrorTypes.NUM_COUNT;            else{                timer = (row - 3) / ErrorTypes.NUM_COUNT + 1;                timecount = (row - 3 )% ErrorTypes.NUM_COUNT;            }            // 读取文件            HSSFCell cell = null;                        for ( int rowIndex = firstRowNum; rowIndex <= lastRowNum; rowIndex++ ) {                Map map = null;                HSSFRow currentRow = sheet.getRow(rowIndex);                // 第一行放表名                if (rowIndex == 0) {                    cell = currentRow.getCell((short)0);                    codeID = cell.getStringCellValue();                    if (!codeID.equals(id)) {                        ((Map)addTag[2]).put("1",ErrorTypes.ID_ERROR);                        return addTag;                    }                    //第二行放属性中文名称                } else if (rowIndex == 1) {                                        //第三行放属性                } else if (rowIndex == 2) {                    columnValue = new String[sheet.getRow(rowIndex).getPhysicalNumberOfCells()];                        for (int i = 0; i < sheet.getRow(rowIndex).getPhysicalNumberOfCells(); i++) {                            if ("".equals(currentRow.getCell((short)i))) {                                ((Map)addTag[2]).put("2",ErrorTypes.PROP_NULL);                                return addTag;                            } else {                                columnValue[i] = (currentRow.getCell((short)i).getStringCellValue());                            }                         }                                                //TODO 字段名转换为属性名                        propValue = getQueryList(id,dbBase,columnValue,sheet.getRow(rowIndex).getPhysicalNumberOfCells());                        //TODO                        propLength = propValue.length;                        // 验证属性                        if (!JudgeValidate.judgeProp(propValue)) {                            ((Map) addTag[2]).put("2", ErrorTypes.PROP_NAME_ERROR);                            return addTag;                        }                } else {                    codeValue = new String[sheet.getRow(rowIndex).getPhysicalNumberOfCells()];                    for (int i = 0; i < sheet.getRow(rowIndex).getPhysicalNumberOfCells(); i++) {                        try{                            codeValue[i] = currentRow.getCell((short)i).getStringCellValue();                        }catch(Exception e){                            codeValue[i] = currentRow.getCell((short)i).getNumericCellValue()+"";                        }                    }                    // 属性与相应的值不对应                    if (propLength < codeValue.length) {                        ((Map)addTag[2]).put((new Integer(count)).toString(),ErrorTypes.VALUE_LENGTH_MATCH);                        if(ignore.equals("0")){                            continue;                        }else{                            return addTag;                        }                    }                    map = new HashMap();                    for (int i = 0; i < propValue.length; i++) {                        // 把属性对应的value放到map中                        if (map.get(propValue[i]) == null) {                            map.put(propValue[i], codeValue[i].trim());                        } else {                            ((Map)addTag[2]).put("2",ErrorTypes.PROP_REPEAT);                            return addTag;                        }                    }                    list.add(map);                }                       if((count - 3) % ErrorTypes.NUM_COUNT  != 0 && count != 3){                    addTag =  JudgeValidate.judgeValue(list, dbBase, codeID, roleCode, status, ignore, addTag,personName,"xls",timers);                             list.removeAll(list);                    timers++;                    // 如果本次执行出错,且不忽略错误就直接返回                    if(((Map)addTag[2]).size() != 0 && "1".equals(ignore))                        return addTag;                }else if((count - 3) % ErrorTypes.NUM_COUNT != timecount && (timers + 1 == timer)){                    //timer记录应该添加几次 timers = 0 记录是第几次执行添加timecount 记录如果不能被整除的时候最后一次是多少条数据                    addTag =  JudgeValidate.judgeValue(list, dbBase, codeID, roleCode, status, ignore, addTag,personName,"xls",timers);                    list.removeAll(list);                }                   count++;            }            return addTag;                    } catch (Exception e) {            log.error(e);            return addTag;        }finally{            try {                if(br!=null)                    br.close();                if(br1!=null)                    br1.close();                if(reader!=null)                    reader.close();                if(reader1!=null)                    reader1.close();            } catch (IOException e) {                log.error(e);            }        }    }/** * 字段名称转化为属性名称 * @param id * @param dbBase * @param columnValue * @param maxCols * @return * @throws Exception */public static String[] getQueryList(String id, DBBeanBase dbBase, String[] columnValue,int maxCols) throws Exception {       List list = new ArrayList();    String[] aStr = new String[columnValue.length];        Statement state = dbBase.getPrivateCon().createStatement();//        ResultSet rs = null;        String selectProp = "";        selectProp ="SELECT COL_SEQUENCE,COL_NAME FROM MDM_CODEPROP WHERE CODE_ID = '" +  id.trim() + "'";        /*for (int i = 0; i < columnValue.length; i++) {            selectProp ="SELECT COL_SEQUENCE FROM MDM_CODEPROP WHERE CODE_ID = '" +  id.trim() + "' AND COL_NAME = '" + columnValue[i] + "'";            rs = state.executeQuery(selectProp);        }*/                ResultSet rs = state.executeQuery(selectProp);        list = populate(rs,MdmCodepropVO.class);        //用columnValue匹配结果集COL_NAME,取得COL_SEQUENCE        //转换成PropXX(COL_SEQUENCE<10? "Prop0"+String.valueof(COL_SEQUENCE):"Prop"+String.valueof(COL_SEQUENCE))        //转换结果以String[]方式返回        MdmCodepropVO mdmCodeprop = null;        for (int m = 0; m < columnValue.length; m++) {            for (int i = 0; i < list.size(); i++) {                mdmCodeprop = new MdmCodepropVO();                mdmCodeprop =  (MdmCodepropVO)list.get(i);                if (columnValue[m].equalsIgnoreCase(mdmCodeprop.getColName())) {                    if (mdmCodeprop.getColSequence() < 10){                        aStr[m] = "Prop0" + mdmCodeprop.getColSequence().toString();                    } else {                        aStr[m] = "Prop" + mdmCodeprop.getColSequence().toString();                    }                }            }        }                if(log.isDebugEnabled()){            log.debug("selectPropSql:"+selectProp);          }                return aStr;        }/***********把resultset结果集转化为list集合************/    public static List populate(ResultSet rs, Class clazz) throws Exception {        ResultSetMetaData metaData = rs.getMetaData(); // 取得结果集的元元素        int colCount = metaData.getColumnCount(); // 取得所有列的个数        List ret = new ArrayList(); // 存放返回结果的容器        Field[] fields = clazz.getDeclaredFields(); // 取得业务对象的属性        while (rs.next()) {            Object newInstance = clazz.newInstance(); // 构造业务对象实例            // 将结果集中每一条记录,每一个字段取出,根据命名规则,对对应的业务对象的属性进行赋值            for (int i = 1; i <= colCount; i++) { // 对于该记录的每一列                try {                    Object value = rs.getObject(i);                    for (int j = 0; j < fields.length; j++) {                        Field f = fields[j];                        if (f.getName().equalsIgnoreCase(metaData.getColumnName(i).replaceAll("_", ""))) {                            BeanUtils.copyProperty(newInstance, f.getName(), value);                        }                    }                } catch (Exception e) {                    // TODO: handle exception                    e.printStackTrace();                }            }            ret.add(newInstance);        }        return ret;    } }


 

原创粉丝点击