精华内容
下载资源
问答
  • 主要为大家详细介绍了Java实现excel数据导入,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 今天小编就为大家分享一篇解决Java导入excel大量数据出现内存溢出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要为大家详细介绍了Javaexcel数据的批量导入方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了Java实现批量导入excel表格数据到数据库中的方法,结合实例形式详细分析了java导入Excel数据到数据库的具体步骤与相关操作技巧,需要的朋友可以参考下
  • java Excel工具类,导入导出Excel数据导入数据对合并表格有判断获取数据,导出数据到Excel,Excel文件不存在会创建。 博客:https://blog.csdn.net/qq_37902949/article/details/81230640
  • java 使用 poi 解析导入数据量(几万数据量+)时,报出OOM。这是使用POI 第二种处理方法,解决大数据导入内存溢出问题,并提升效率
  • java读取excel数据导入数据库源码 java读取excel数据导入数据库源码
  • Java导入Excel文件返回数据对应属性类字段,Java导出Excel文件如何让数据对应指定的标题字段-附件资源
  • javaexcel表的数据导入到数据库(可能有些类型还没考虑完全,抽空写的) 简单的思路 一、先获取数据库表的字段名、主键名, 二、读取excel文件的数据(注意:excel文件的数据表字段的顺序与该表的顺序一致,...
  • java导入Excel表格数据

    千次阅读 多人点赞 2019-05-08 13:55:09
    一、思路是这样的: 1.先做好一个Excel模板供用户下载,例如下图 2.用户使用模板填好数据,上传Excel文件到web后台,后台接收文件。 ... 3.把用户上传的文件进行...1.要导入数据JAVA对象如下: public clas...

    一、思路是这样的:

          1.先做好一个Excel模板供用户下载,例如下图

          2.用户使用模板填好数据,上传Excel文件到web后台,后台接收文件。

          3.把用户上传的文件进行校验文件格式、字段是否符合要求,符合要求则解析数据,保存到数据库中,不符合要求则提示;

          

    二、代码实现

     1.要导入的数据JAVA对象如下:

    public class Rfid extends BaseEntity{
    
        //名称
        private String name;
        //藏品类别
        private String rfidTypeId;
        //藏品类别名称
        private String rfidTypeName;
        //藏品分类
        private String typeName;
        //藏品年代
        private String age;
        //设计师
        private String stylist;
        //品牌
        private String brand;
        //国家地区
        private String contriesRegions;
        //材质
        private String texture;
        //工艺
        private String technology ;
        //尺寸
        private String measure;
        //颜色
        private String colour;
        //入藏时间
        private Date enterTime;
        //包含藏品数量
        private Integer rfidCout;
        //藏品来源
        private String source;
        //馆藏状态
        private Integer rfidState=0;
        //关键词
        private String keyword;
        //曾被引用
        private String quote;
        //关联藏品
        @Transient
        private String relevance;
        //保险
        private String insurance;
        //藏品编号
        private String typeNumber;
        //出入库状态
        private Integer status=0;
        //仓库位置信息
        private String locationInformation;
        //描述
        private String description;
    
    //省略get、set方法
    }

     

    2.Excel表格导入后,处理代码如下

    /**
         * 读取出filePath中的所有数据信息
         * @param filePath filePath excel文件的绝对路径
         * @param cellNameList 要读取的对应表头名
         * @return
         */
        public static List<String[]> getDataFromExcel(String filePath,List<String> cellNameList )throws Exception{
    
            List<String[]> resultList = new ArrayList<>();
            //判断是否为excel类型文件
            if(!filePath.endsWith(".xls")&&!filePath.endsWith(".xlsx"))
            {
                throw new BaseException("文件不是excel类型");
            }
            FileInputStream fis =null;
            Workbook wookbook = null;
            int flag = 0;
            try
            {
                //获取一个绝对地址的流
                fis = new FileInputStream(filePath);
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            try
            {
                //2003版本的excel,用.xls结尾
                wookbook = new HSSFWorkbook(fis);//得到工作簿
    
            }
            catch (Exception ex)
            {
                try
                {
                    //2007版本的excel,用.xlsx结尾
                    fis = new FileInputStream(filePath);
                    wookbook = new XSSFWorkbook(fis);//得到工作簿
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
            //得到一个工作表
            Sheet sheet = wookbook.getSheetAt(0);
            //获得表头
            Row rowHead = sheet.getRow(0);
            //根据不同的data放置不同的表头
           /* Set<String> headSet = new HashSet<>();*/
            //判断表头列数是否与预期的列数一致
            if(rowHead.getPhysicalNumberOfCells() != cellNameList.size())
            {
                throw new BaseException("表头列数与要导入的数据库不对应");
            }
            //判断表头与预期数据是否相符
             while (flag < cellNameList.size()){
                Cell cell = rowHead.getCell(flag);
                String cellName=cellNameList.get(flag);
                if (getRightTypeCell(cell).equals(cellName))
                {
                    //headSet.add(cellName);
                }else{
                    throw new BaseException("表头["+getRightTypeCell(cell)+"]不合规范,请修改后重新导入");
                }
                flag++;
            }
            /*if(headSet.size()!= cellNameList.size()){
                throw new BaseException("表头不合规范,请修改后重新导入");
            }*/
    
            //获得数据的总行数
            int totalRowNum = sheet.getLastRowNum();
            if(0 == totalRowNum)
            {
                throw new BaseException("Excel内没有数据");
            }
    
            //要获得属性
            String name = "";
            //获得所有数据
            for(int i = 1 ; i <= totalRowNum ; i++)
            {
                //获得第i行对象
                Row row = sheet.getRow(i);
                String [] cells=new String[cellNameList.size()];
                for(int j=0;j<cellNameList.size();j++){
                    name = (String) getRightTypeCell(row.getCell(j));
                    cells[j]=name;
                }
                resultList.add(cells);
            }
            return resultList;
        }
    
    
    
    
    
    /**
         * 把EXCEL Cell原有数据转换成String类型
         * @param cell 一个单元格的对象
         * @return 返回该单元格相应的类型的值
         */
        public static String getRightTypeCell(Cell cell) {
            if(cell==null) return "";
    
            String cellSring="";
            switch (cell.getCellType()) {
                case HSSFCell.CELL_TYPE_STRING: // 字符串
                    cellSring = cell.getStringCellValue();
                    break;
                case HSSFCell.CELL_TYPE_NUMERIC: // 数字
                    if(HSSFDateUtil.isCellDateFormatted(cell)){
                        //用于转化为日期格式
                        Date d = cell.getDateCellValue();
                        DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
                        cellSring= formater.format(d);
                    }else{
                        // 用于格式化数字,只保留数字的整数部分
                        DecimalFormat df = new DecimalFormat("########");
                        cellSring= df.format(cell.getNumericCellValue());
    
                    }
                    //cellSring=String.valueOf(cell.getNumericCellValue());
                    break;
                case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
                    cellSring=String.valueOf(cell.getBooleanCellValue());
                    break;
                case HSSFCell.CELL_TYPE_FORMULA: // 公式
                    cellSring=String.valueOf(cell.getCellFormula());
                    break;
                case HSSFCell.CELL_TYPE_BLANK: // 空值
                    cellSring="";
                    break;
                case HSSFCell.CELL_TYPE_ERROR: // 故障
                    cellSring="";
                    break;
                default:
                    cellSring="ERROR";
                    break;
            }
            return cellSring;
        }

    3.业务逻辑即Service层,代码如下

    /**
         * 批量导入藏品
         * @param file
         * @return
         * @throws Exception
         */
        public List<Rfid> importRfid(MultipartFile file) throws Exception {
    
            List<Rfid> resultList=new ArrayList<>();
            String origName = file.getOriginalFilename();
            String name = FilesService.trimExt(origName);
            String ext = FilesService.getExt(origName);
            if (ext != null) {
                ext = ext.toLowerCase();
            }
    
            String fileName = name+"_"+filesService.generateFileName(new Date());
    
            String fullPath= uploadPathHelper.getRootPath()+ uploadPathHelper.getFilePath() + fileName;
            File f = new File(uploadPathHelper.getRootPath()+ uploadPathHelper.getFilePath());
            if (!f.exists()) {
                f.mkdirs();
            }
            String url =fullPath+ "." + ext;
            File f1 = new File(url);
            f1.createNewFile();
            file.transferTo(f1);
            List<String[]> resultString= excelUtil.getDataFromExcel(url,this.getCellNameList());
    
            resultString.forEach(rfidArray->{
                Rfid rfid=new Rfid();
                rfid.setName(rfidArray[0]);
                rfid.setRfidTypeId(rfidArray[1]);
                rfid.setRfidTypeName(rfidArray[2]);
                rfid.setTypeName(rfidArray[3]);
                rfid.setAge(rfidArray[4]);
                rfid.setStylist(rfidArray[5]);
                rfid.setBrand(rfidArray[6]);
                rfid.setContriesRegions(rfidArray[7]);
                rfid.setTexture(rfidArray[8]);
                rfid.setTechnology(rfidArray[9]);
                rfid.setMeasure(rfidArray[10]);
                rfid.setColour(rfidArray[11]);
                rfid.setEnterTime(TimeUtil.getDate(rfidArray[12]));
                if(rfidArray[13]!=null)
                rfid.setRfidCout(Integer.parseInt(rfidArray[13]));
                rfid.setSource(rfidArray[14]);
                rfid.setKeyword(rfidArray[15]);
                rfid.setLocationInformation(rfidArray[16]);
                rfid.setDescription(rfidArray[17]);
                try {
                    resultList.add( this.save(rfid,null));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
    
            //导入完成,删除导入文件
            File delExt=new File(url);
            if(delExt.exists()){
                delExt.delete();
            }
            return resultList;
        }
    
    
    
    /**
    *要导入Excel字段名称
    *
    **/
    
    
    public List<String> getCellNameList(){
            //导入藏品的字段名称
            List<String> cellNameList =new ArrayList<>();
            cellNameList.add("名称");
            cellNameList.add("藏品类别");
            cellNameList.add("藏品类别名称");
            cellNameList.add("藏品分类");
            cellNameList.add("藏品年代");
            cellNameList.add("设计师");
            cellNameList.add("品牌");
            cellNameList.add("国家地区");
            cellNameList.add("材质");
            cellNameList.add("工艺");
            cellNameList.add("尺寸");
            cellNameList.add("颜色");
            cellNameList.add("入藏时间");
            cellNameList.add("包含藏品数量");
            cellNameList.add("藏品来源");
            cellNameList.add("关键词");
            cellNameList.add("仓库位置信息");
            cellNameList.add("描述");
            return  cellNameList;
        }

    4.控制层代码

    @ResponseBody
        @PostMapping("importRfid")
        public String importRfid(MultipartFile file) throws Exception {
            return Result.succeedResultByMsgAndDate("藏品导入成功",rfidService.importRfid(file));
        }

     

     

    到此Excel批量导入数据完成。

    展开全文
  • 主要为大家详细介绍了java实现批量导入Excel表格数据到数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • java实现Excel数据导入到数据库

    千次下载 热门讨论 2014-05-31 23:59:34
    java实现Excel数据导入到数据库,如果数据库中存在就更新。 数据库数据导入到Excel表中。
  • 主要为大家详细介绍了Java实现Excel批量导入数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Java导入Excel数据

    万次阅读 2018-09-10 11:27:48
    例如导入excel所在目录为D:/cs/test.xls,测试数据如下图所示: 1.创建与excel表头对应的xml模版 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!-- 导入的模版校验...

    例如导入的excel所在目录为D:/cs/test.xls,测试数据如下图所示:

    1.创建与excel表头对应的xml模版

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 导入的模版校验文件 -->
    <execelImport>
    	<field>姓名</field>
    	<field>性别</field>
    	<field>手机号</field>
    	<field>邮箱</field>
    	<field>住址</field>
    </execelImport>

    2.创建导入数据对应实体类

    public class Persion {
    
    	private String name;
    	private String sex;
    	private String phone;
    	private String email;
    	private String address;
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getSex() {
    		return sex;
    	}
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    	public String getPhone() {
    		return phone;
    	}
    	public void setPhone(String phone) {
    		this.phone = phone;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	public String getAddress() {
    		return address;
    	}
    	public void setAddress(String address) {
    		this.address = address;
    	}
    	
    	public void setValues(String[] values) throws Exception{
    		this.name = values[0] ==null?"":values[0].trim();
    		this.sex = values[1] ==null?"":values[1].trim();
    		this.phone = values[2] ==null?"":values[2].trim();
    		this.email = values[3] ==null?"":values[3].trim();
    		this.address = values[4] ==null?"":values[4].trim();
    	}
    	
    }
    

    3.创建导入数据工具类

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.URLDecoder;
    import java.text.DateFormat;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Set;
    
    import javax.validation.ConstraintViolation;
    import javax.validation.Validation;
    import javax.validation.Validator;
    import javax.validation.ValidatorFactory;
    
    import org.apache.log4j.Logger;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.util.CellReference;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import org.springframework.expression.EvaluationException;
    import org.springframework.expression.Expression;
    import org.springframework.expression.ExpressionParser;
    import org.springframework.expression.spel.standard.SpelExpressionParser;
    
    /**
     * @Desc 对execel文件的校验并且解析
     */
    @SuppressWarnings("rawtypes")
    public class ExecelUtil {
    	Logger logger = Logger.getLogger(this.getClass());
    
    	private String description = "";// 如果校验失败,将会给出详细提示信息
    	private Sheet sheet;// execel 对象
        private List<String> fieldList;//从xml读取到的execel表格信息
        private int rowIndex = 0;//当前操作行
        private Object objectBean;//每一行数据封装 
        private Cell cellStart;// 数据的开始单元格
        private Class clazz; //需要封装的类
        private Validator validator; //hibernate 的校验器
        private String[] fieldVals ; //从execel读到的某一行的数据
        private int fieldSize = 0;  //有效数据的列数
        private DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // 针对日期的默认转换形式
        private Expression exp ;//EL 解析器
        private ExpressionParser parser;
        
        private DecimalFormat df = new DecimalFormat("#");
        
    	public String getDescription() {
    		return description;
    	}
    
    	public Object getObjectBean() {
    		return objectBean;
    	}
    	/**
    	 * 
    	 * @param execelFilename
    	 *            execel文件名
    	 * @param xmlFilename
    	 *            execel文件所对应的校验文件
    	 * @param calzz 需要封装的类
    	 */
    	public ExecelUtil(InputStream execelIS,String xmlFilename,Class clazz,String suffix) throws ValidationExeception{
    		// 打开execel工作簿		
    		 Workbook wb = null;
    		try {
    			if(suffix.equals(".xls")){
    				wb = new HSSFWorkbook(execelIS);
    			}else if(suffix.equals(".xlsx")){
    				wb = new XSSFWorkbook(execelIS);
    			}
    			execelIS.close();
    		} catch (IOException e) {
    			logger.error(e);
    			throw new ValidationExeception("","加载文件失败,请确保是否是Execel表格");
    		}		
    		sheet = wb.getSheetAt(0);// 默认取第一个工作簿
    		//读配置文件,获取所有的属性列描述
            fieldList = this.readFieldsFromXML(getAbsolutePath(xmlFilename));
            //个数
            fieldSize = fieldList.size();
            
    		//找到有效数据的开始单元格
    		cellStart = this.findStartCell();
    		if(cellStart == null){			
    			throw new ValidationExeception("",this.description);
    		}
    		
    		//每次读取一行execel数据,rowIndex每次增1
    		rowIndex = cellStart.getRowIndex()+1;
    		
    		//需要封装的对象类
    		this.clazz = clazz;
    		//初始化校验器
    		ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    		validator = factory.getValidator();
    		//初始化EL解析器
    		parser = new SpelExpressionParser();
    		exp = parser.parseExpression("values");
    	}
    	
    	//是否还有数据
        public boolean hasNext(){
        	Row row = sheet.getRow(rowIndex++);
        	if(row == null)
        		return false;
        	fieldVals = this.getRowValues(row, cellStart.getColumnIndex());
            if(Arrays.asList(fieldVals).indexOf("") != -1){
            	for(String s :fieldVals)//如果每个字段都是空的,则返回false 否则true
            		if(!s.equals(""))
            			return true;
            	return false;
            }
        	return true;
        }
        //校验
        public boolean validate(){
            try {        
            	objectBean = Class.forName(clazz.getName()).newInstance();
    		} catch (Exception e) {
    			logger.error(e);
    		}
    		
    		try{	
    		    exp.setValue(objectBean, fieldVals);// 给objectBean的属性赋值
    		    
    		}catch(EvaluationException e){//由于所有的数据类型转换都有objectBean里面来处理,故可能有异常,需要进行相应的处理
    			System.out.println(e);
    			List exList = Arrays.asList("ParseException","NumberFormatException");//一般可能发生的异常
    			Throwable t = e.getCause();
    			while(t!=null){
    				String causeClazz = t.getClass().getSimpleName();
    				if(exList.contains(causeClazz)){
                           this.description = "第" +rowIndex+"行,类型转换失败:"+t.getMessage();
                           return false;
    				}else if(causeClazz.equals("ValidationExeception")){//自定义异常
    					this.description = "第" +rowIndex+"行,"+t.getMessage();
    					return false;
    				}else
    					t = t.getCause();
    			}			 
    			//this.description = parser.parseExpression("sales").getValue(objectBean,String.class);
    			this.description = "数据错误";
    			return false;
    		}
    		//校验,校验规则是配置在objectBean对象里面
    		Set<ConstraintViolation<Object>> constraintViolations = validator.validate(objectBean);
    		
    		if(constraintViolations.size() >0){//校验失败时,提示相应信息
    			this.description = "第" +rowIndex+"行,校验出错:";
    			for (ConstraintViolation<Object> vl : constraintViolations) {
    				this.description = this.description + vl.getMessage()+" ;  ";
    			}				
    			return false;
    		}
    		return true;
        }
        
        private String[] getRowValues(Row row,int columnStartIndex){
            String[] values = new String[fieldSize];
        	for(int j = columnStartIndex,t=0;t<fieldSize;j++,t++){
        		Cell c = row.getCell(j);
        		if(c==null){
        			values[t] = "";
        			continue;
        		}
        		switch(c.getCellType()){
        		case Cell.CELL_TYPE_BLANK:
        			values[t] = "";
        			break;
        		case Cell.CELL_TYPE_BOOLEAN:
        			values[t] = String.valueOf(c.getBooleanCellValue());
        			break;
        		case Cell.CELL_TYPE_NUMERIC:
        			
    				if (HSSFDateUtil.isCellDateFormatted(c)) {
    					values[t] = format.format(c.getDateCellValue());
    				} else if(c.getCellStyle().getDataFormat() == 58) {
    					// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)  
    	                SimpleDateFormat sdf = new SimpleDateFormat("MM/dd");  
    	                double value = c.getNumericCellValue();  
    	                Date date = org.apache.poi.ss.usermodel.DateUtil  
    	                        .getJavaDate(value);  
    	                
    	                values[t] = sdf.format(date); 
    				}
    				else {
    					values[t] = new DecimalFormat("#").format(c.getNumericCellValue()); 
    				}
        			break;
        		case Cell.CELL_TYPE_STRING:
        			values[t] = String.valueOf(c.getStringCellValue());
        			break;
        		
        		default:
        			values[t] = "";
        			break;
        		}
        	}
        	return values;
        }
    	// 根据某一个单元格,得到更人性化的显示,例如“A4”
    	private String getCellRef(Cell cell) {
    		return CellReference.convertNumToColString(cell.getColumnIndex()) + (cell.getRowIndex() + 1);
    	}
    	private  String getAbsolutePath(String file) throws ValidationExeception {
    		try {
    			file = this.getClass().getClassLoader().getResource(file).getFile();
    
    		} catch (NullPointerException e) {
    			throw new ValidationExeception(file, "文件不存在");
    		}
    		try {
    			// 解决当出现中文路径时不能解析的bug
    			file = URLDecoder.decode(file, "UTF-8");
    		} catch (UnsupportedEncodingException e) {
    			throw new ValidationExeception(file, "解码失败");
    		}
    		return file;
    	}
    	private List<String> readFieldsFromXML(String xmlFilename)throws ValidationExeception{
    		SAXReader reader = new SAXReader();
    		Document document = null;
    		
    		try {
    			document = reader.read(new File(xmlFilename));// 加载配置文件
    		} catch (DocumentException e) {
    			e.printStackTrace();
    			this.description = "IO 异常,读取配置文件失败";
    			throw new ValidationExeception(xmlFilename,"IO 异常,读取配置文件失败");
    		}
    		
    		Element root = document.getRootElement();
    		List<String> fields = new ArrayList<String>();
    		for (Iterator iter = root.elementIterator("field"); iter.hasNext();) {
    			Element field = (Element) iter.next();
                fields.add(field.getTextTrim());
    		}
    		
    		return fields;
    	}
    	/**
    	 * 从execel表中找到数据开始的单元格
    	 * @return
    	 */
    	private  Cell findStartCell(){
    		String firstFieldDesc = this.fieldList.get(0);
    		int endRow = sheet.getLastRowNum()>100?100:sheet.getLastRowNum();
    		for(int i = 0;i<=endRow;i++){
    			Row r = sheet.getRow(i);
    			if (r == null)
    				continue;
    			for(int j = 0;j < r.getLastCellNum();j++){
    				Cell c = r.getCell(j);
    				if( c == null)
    					continue;
    				if(c.getCellType() == Cell.CELL_TYPE_STRING){
    					if(c.getStringCellValue().trim().equals(firstFieldDesc)){//找到第一个符合要求的字段,接下来判断它相邻的字段是否都符合要求
                            if(fieldList.size()>r.getLastCellNum()-j){
                            	this.description = "execel表格与所给配置描述不符,请下载模板文件";
                            	return null;
                            }
    						for(int k=j+1,t=1;k<=j+fieldList.size()-1;k++,t++){
    							Cell c2 = r.getCell(k);
    							if(c2 == null){
    								this.description = "请确保单元格"+this.getCellRef(c2)+"内容是\""+fieldList.get(t)+"\"";
    								return null;
    							}
    							if(c2.getCellType() == Cell.CELL_TYPE_STRING){
    								if(c2.getStringCellValue().contains(fieldList.get(t)))
    									continue;
    								else{
    										this.description = "请确保单元格"+this.getCellRef(c2)+"内容是\""+fieldList.get(t)+"\"";
    										return null;	
    								}
    							}
    							 
    						}
    						return c;
    					}else
    						continue;
    				}else
    					continue;
    			}
    		}
    		this.description = "找不到\""+fieldList.get(0)+"\"这一列";
    		return null;
    	}
    
    	public int getRowIndex() {
    		return rowIndex;
    	}
    
    	public DateFormat getFormat() {
    		return format;
    	}
    
    	
    	public String createExcelIncludeFailReason(InputStream execelIS,String path,String newExcelName, HashMap<Integer,String> errHash) {
    		FileOutputStream file;
    		try {
    			file = new FileOutputStream(path+"/"+newExcelName);
    			Workbook workbook=this.getWorkbook(execelIS);
    			Sheet s=workbook.getSheetAt(0);			
    		    
    		    //int endRow = sheet.getLastRowNum()>100?100:sheet.getLastRowNum();
    			int endRow = sheet.getLastRowNum();
    		    for(int i=1;i<=endRow;i++){		    	
    		    	if(errHash.get(i)!=null){
    		    		Row rowkk = s.getRow(i);	    			
    			    	Cell error_cell = rowkk.createCell(fieldList.size());
    			    	error_cell.setCellValue(errHash.get(i));
    		    	}		    	
    		    }
    		    workbook.write(file);
    			file.close();
    		} catch (FileNotFoundException e) {
    			
    			e.printStackTrace();
    		} catch (IOException e) {
    			
    			e.printStackTrace();
    		} catch (ValidationExeception e) {
    			
    			e.printStackTrace();
    		}
    
    		return newExcelName;
    	}
    	
    
    	public String getFile(InputStream execelIS,String path,String appPath, List<Integer> listF, boolean b) {
    		FileOutputStream file;
    		try {
    			file = new FileOutputStream(path+"/"+appPath);
    			Workbook workbook=this.getWorkbook(execelIS);
    			Sheet s=workbook.getSheetAt(0);			
    		    Row row=null;
    		   //int endRow = sheet.getLastRowNum()>100?100:sheet.getLastRowNum();
    		    int endRow = sheet.getLastRowNum();
    		    for(int i=1;i<=endRow;i++){
    		    	
    		    	Row rowkk = s.getRow(i);	    			
    		    	Cell info_cell = rowkk.createCell(fieldList.size());
    		    	info_cell.setCellValue("sss");
    		    	
    		    	//删除错误行
    		    	if(b&& listF.contains(i)){
    		    		row=s.getRow(i);		    		
    		    		//System.out.println("错误行删除"+i);
    		    		if(row!=null)s.removeRow(row);
    		    	}
    		    	//删除正确行
    		    	if(!b && !listF.contains(i)){
    		    		row=s.getRow(i);
    		    		//System.out.println("正确行删除"+i);
    		    		if(row!=null)s.removeRow(row);
    		    	}
    		    }
    		    workbook.write(file);
    			file.close();
    		} catch (FileNotFoundException e) {
    			
    			e.printStackTrace();
    		} catch (IOException e) {
    			
    			e.printStackTrace();
    		} catch (ValidationExeception e) {
    			
    			e.printStackTrace();
    		}
    
    		return appPath;
    	}
    	public  Workbook  getWorkbook(InputStream execelIS) throws ValidationExeception{
    		Workbook wb = null;
    		try {
    			wb = new HSSFWorkbook(execelIS);
    		} catch (IOException e) {
    			logger.error(e);
    			throw new ValidationExeception("","加载文件失败,请确保是否是Execel表格");
    		}
    		return wb;
    	}
    	 
    }

    4.测试取出数据

    public class Test {
    
    	public static void main(String[] args) throws Exception {
    		InputStream is = new FileInputStream("D:/cs/test.xls");
    		ExecelUtil eu = new ExecelUtil(is, "excel/import_test.xml", Persion.class,".xls");
    		Persion cp = null;
    		while (eu.hasNext()) {
    			if (eu.validate()) {
    				cp = (Persion) eu.getObjectBean();				
    				System.out.println(cp.getName()+"/"+cp.getSex()+"/"+cp.getPhone()+"/"+cp.getEmail()+"/"+cp.getAddress());
    			}
    		}
    	}
    }

     

    展开全文
  • java导入excel日期数据

    千次阅读 2019-01-18 18:17:32
    在使用poi解析Excel文件时,会发现,表格中的日期解析出来是一个数字,如下: 我们期望这个日期解析出来是:2015/8/21,而结果却是42237.什么原因呢?这个数字是什么呢?是以1900年为原点,到2015年8月21日,之间...

    在使用poi解析Excel文件时,会发现,表格中的日期解析出来是一个数字,如下:

    我们期望这个日期解析出来是:2015/8/21,而结果却是42237.什么原因呢?这个数字是什么呢?是以1900年为原点,到2015年8月21日,之间经过的天数。

    解决方案:

    将数字作为天数加在1900, 01, 01上

    import org.apache.commons.lang.time.DateUtils;
    String dayStr = StringUtils.substringBefore(data.get(titleMap.get("交易时间")), ".");
    Calendar c = new GregorianCalendar(1900, 0, -1);
    Date date = DateUtils.addDays(c.getTime(), Integer.valueOf(dayStr).intValue());
    entity.setTradeDate1(sdf.format(date));

    此时的data值就是转换成Data的数据类型了;

    展开全文
  • java 批量导入excel数据

    热门讨论 2012-04-04 12:46:37
    java平台中批量将excel表格中数据导入到数据库中
  • java导入Excel的同时导入excle里面的图片,提供测试demo,使用工具类-XSSFWorkbook
  • java运用poi把excel数据导入到oracle数据库中,上场内容未自己写的小demo,可下载查看,不清楚的可以联系我进行帮助。
  • java实现excel动态表头导入

    千次阅读 2019-06-19 10:13:47
    使用java导入excel表格时,一般采用hssfworkbook(excel2003)和xssfworkbook(excel2007) 首先获取workbook: /** * 描述:根据文件后缀,自适应上传文件的版本 * * @param inStr 将file.getInputStream()...

    问题的提出

    使用java在导入excel表格时,一般采用hssfworkbook(excel2003)和xssfworkbook(excel2007)
    首先获取workbook:

    /**
    	 * 描述:根据文件后缀,自适应上传文件的版本
    	 * 
    	 * @param inStr    将file.getInputStream()获取的输入流
    	 * @param fileName file.getOriginalFilename()获取的原文件名
    	 */
    	public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {
    		Workbook wb = null;
    		String fileType = fileName.substring(fileName.lastIndexOf("."));
    		if (excel2003L.equals(fileType)) {
    			wb = new HSSFWorkbook(inStr); // 2003-
    		} else if (excel2007U.equals(fileType)) {
    			wb = new XSSFWorkbook(inStr); // 2007+
    		} else {
    			throw new Exception("解析的文件格式有误!");
    		}
    		return wb;
    	}
    

    使用List<List>类型存储读取到的数据

    /**
     * 
     * 读取指定sheet 页指定行数据
     * 
     * @param sheetIx  指定 sheet 页,从 0 开始
     * @param startRow 指定开始行,从 0 开始
     * @param endRow   指定结束行,从 0 开始 start=end=0 就是第一行
     * @param startCol 指定开始列
     * @param startCol 指定结束列
     * @return
     * @throws Exception
     */
    public List<List<String>> read(int sheetIx, int startRow, int endRow, int startCol, int endCols) throws Exception {
    	Sheet sheet = workbook.getSheetAt(sheetIx);
    	List<List<String>> list = new ArrayList<List<String>>();
    
    	if (endRow > getRowCount(sheetIx)) {
    		endRow = getRowCount(sheetIx);
    	}
    
    	for (int i = startRow; i <= endRow; i++) {
    		List<String> rowList = new ArrayList<String>();
    		Row row = sheet.getRow(i);
    		for (int j = startCol; j < endCols; j++) {
    			if (row == null) {
    				rowList.add(null);
    				continue;
    			}
    			//rowList.add(getCellValue(row.getCell(j)));
    			//取excel表中公式数据 ,表格中row.getCell(j).getCellTypeEnum() 可能会发生空指针错误,用try...catch处理
    			try {
    		        if (row.getCell(j).getCellTypeEnum() == CellType.FORMULA) {
    		        	row.getCell(j).setCellType(CellType.STRING);
    		            rowList.add(row.getCell(j).getStringCellValue());
    		        }else {
    		        	rowList.add(getCellValueToString(row.getCell(j)));
    		        }
    			}catch(Exception e) {
    				rowList.add(getCellValueToString(row.getCell(j)));
    			}
    		}
    		list.add(rowList);
    	}
    	return list;
    }
    

    这样是一般的处理过程,这样处理有个不好的地方就是拓展性不强,在后续调用List<List>数据时需知道在第几列,最致命的是表格添加字段或删除字段后,所有序号都得修改,所以需要解决这一问题。

    问题的解决

    本文新建工具类,采用反射技术动态的提取类方法

    public class ArUtils<T> {
    	
    	private String[] ldcode = {"Id","Name", "A","B","C","D","E","F",
    	                           "AtpDeviceNo2","AtpDeviceNo16","Tpproperty1","Tpproperty2",
    	                           "Tpproperty3","Tpproperty4","Tpproperty5","Tpproperty6","Tpproperty7",
    	                           "Remarks"};
    	
    	private String id;
    	
    	private String name;
    	
    	private String a;
    	
    	private String b;
    

    配置各私有属性的get,set方法。

    /**
     * 
     * 读取指定sheet 页指定行<T>数据
     * 
     * @param sheetIx 指定 sheet 页,从 0 开始
     * @param start   指定开始行,从 0 开始
     * @param end     指定结束行,从 0 开始
     * @return
     * @throws Exception
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public List<List<T>> readGeneric(int sheetIx, int start, int end, T t) throws Exception {
    	Sheet sheet = workbook.getSheetAt(sheetIx);
    	List<List<T>> list = new ArrayList<List<T>>();
    
    	if (end > getRowCount(sheetIx)) {
    		end = getRowCount(sheetIx);
    	}
    
    	for (int i = start; i <= end; i++) {
    		List<T> rowList = new ArrayList<T>();
    		Row row = sheet.getRow(i);
    		List rowdata = getRowdata(row);
    		Class clazz = t.getClass();
    		Object fa= clazz.newInstance();
    		Method method = t.getClass().getMethod("getLdcode", new Class[]{});
    		Object[] ldcode = (String[])method.invoke(fa, new Object[]{});
    		
    		for(int j = 0; j < rowdata.size(); j++) {
    			method = t.getClass().getMethod("set"+ldcode[j], String.class);
    			method.invoke(fa, rowdata.get(j));
    		}
    		rowList.add((T) fa);
    		list.add(rowList);
    	}
    
    	return list;
    }
    

    首先反射获取string[]数组,数组中存储着各个私有属性,再调用个各属性的set方法,将一行数据存储进工具类的实例,这样就完成了键值对存储,之后调用时直接使用工具类的get方法就好了。

    展开全文
  • 实现了Excel文件数据的解析,并且导入到对应的数据库,可根据自身需要进行更改和丰富
  • javaexcel表格数据导入数据库
  • 内容主要为service业务代码,分三个模块(导入导出和模板下载),可自定义,注释比较全
  • java jxl 通过excel模板创建新文件并将数据导入excel,实现按行、列插入数据
  • 导入excel表格到数据库、根据路径导入excel表格到数据库代码、根据excel表格路径将数据导入到数据库、验证要导入的excel表格数据、根据路径获取MultipartFile、FileItem文件
  • 改资源是用Java语言和jxl插件开发的一款对Excel进行读写操作的工具类,可读取指定列的Excel数据到程序中,也可以将DB查询的结果集写入到Excel文档中,导出的单元格样式可以设置,含开发包
  • 这个是使用java语言 poi导入excel到数据库中,同时使用了xml对excel的每个单元格数据进行了非空验证。经测试,导入数据库成功。
  • Java类实现了将标准的json字符串转换成map,并将数据解析到Excel的方法,本方法简单实用,可以批量导出数据Excel文档中
  • NULL 博文链接:https://hahawowo.iteye.com/blog/783874

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,754
精华内容 12,701
关键字:

java导入excel动态数据

java 订阅