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; } }
- java读取Excel读取
- Java读取Excel方式
- java读取excel文件
- java读取excel 文件
- JAVA读取EXCEL
- java读取excel
- java读取excel文件
- Java读取Excel文件
- java读取Excel文件
- java读取 excel 文本
- java 读取一个excel
- Java 读取Excel实例
- java 读取excel 文件
- java读取Excel
- java读取Excel
- java读取Excel
- JAVA 读取EXCEL
- java读取Excel文件
- vs2010下配置proc编程环境11
- plist字段列表
- 认证(authentication)与授权(authorization)
- POJ2635 The Embarrassed Cryptographer
- Oracle查询速度慢的原因总结
- java 读取excel
- sgip错误代码
- QT 数据库操作
- UIImageJPEGRepresentation和UIImagePNGRepresentation
- Fiddler 模拟http form提交
- Oracle之分页查询
- 用GDB调试程序(七)
- 使用Aspose.Pdf将PDF文件转换成TeX格式
- spring自动扫描装配Bean 失败可能的原因