精华内容
下载资源
问答
  • java导入excel

    2018-10-07 20:53:15
    java导入excel到sql server 2008 运行ImportForm从表单中选择所要导入的excel文件,即可把excel表导入sql server 2008数据库的相应表中
  • java 导入excel

    2012-07-26 11:54:33
    java 导入excel到数据库
  • java导入Excel

    2016-05-10 11:30:41
    完美的实现了java代码将数据导入Excel或将Excel数据导入java后台
  • java导入EXCEL

    2010-08-15 22:49:53
    lotus BS 通过 java导入EXCEL的数据到系统当中,
  • Java导入excel文件

    2017-12-13 15:16:17
    Java导入excel文件,里面是一个完整的Java项目,包括了需要的jar包
  • java 读取excel数据 poi导入excel 数据 java实现导入excel数据 一、说明 1、在实际开发中,可能有需求需要将excel导入到业务系统中,具体实现可以使用Apache poi 来实现。 2、依赖pom如下: <dependency>...

                 java 读取excel数据 poi导入excel 数据 java实现导入excel数据

    一、说明

    1、在实际开发中,可能有需求需要将excel导入到业务系统中,具体实现可以使用Apache poi 来实现。

    2、依赖pom如下:

         <dependency>
    	    <groupId>org.apache.poi</groupId>
    	    <artifactId>poi</artifactId>
    	    <version>3.15</version>
    	</dependency>
        
    	<dependency>
    	    <groupId>org.apache.poi</groupId>
    	    <artifactId>poi-ooxml</artifactId>
    	    <version>3.15</version>
    	</dependency>

    二、代码实现

    1、创建ExcelImport 类,实现excel数据导入

    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    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 org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.DateUtil;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.springframework.web.multipart.MultipartFile;
    
    /**
     * description: Excel 数据导入
     * @version v1.0
     * @author w
     * @date 2020年3月30日下午9:46:27
     **/
    public class ExcelImport {
    
    	private ExcelImport INSTANSE = new ExcelImport();
    	
    	/**
    	 * excel 2003 suffix
    	 */
    	private static final String EXCEL_XLS_SUFFIX = ".xls" ; 
    	
    	/**
    	 * excel 2007 或以上 suffix
    	 */
    	private static final String EXCEL_XLSX_SUFFIX = ".xlsx";
    	
    	/**
    	 * 分隔符 "."
    	 */
    	public static final String POINT = ".";  
    	
    	/**
    	 * description: 读取excel数据 
    	 * @param file
    	 * @return List<List<Object>>
    	 * @version v1.0
    	 * @author w
    	 * @date 2020年3月31日 下午3:36:39
    	 */
    	public static List<List<Object>> importFile (File file) throws Exception{
    		if(file == null) {
    			return null ;
    		}
    		if(file.getName().endsWith(EXCEL_XLS_SUFFIX)) {
    			return readXls(new FileInputStream(file));
    		}
    		if(file.getName().endsWith(EXCEL_XLSX_SUFFIX)) {
    			return readXlsx(new FileInputStream(file));
    		}
    		throw new RuntimeException("文件不对,必须是excel文件,后缀名以:"+EXCEL_XLS_SUFFIX + " 或者 "+ EXCEL_XLSX_SUFFIX);
    	}
    	
    	/**
    	 * description: 导入excel --- 支持web
    	 * @param fileName
    	 * @param inputStream
    	 * @throws Exception
    	 * @return List<List<Object>>
    	 * @version v1.0
    	 * @author w
    	 * @date 2020年3月31日 下午4:51:01
    	 */
    	public static List<List<Object>> importFile (MultipartFile multipartFile) throws Exception{
    		if(multipartFile == null) {
    			return null ;
    		}
    		if(multipartFile.getOriginalFilename().endsWith(EXCEL_XLS_SUFFIX)) {
    			return readXls(multipartFile.getInputStream());
    		}
    		if(multipartFile.getOriginalFilename().endsWith(EXCEL_XLSX_SUFFIX)) {
    			return readXlsx(multipartFile.getInputStream());
    		}
    		throw new RuntimeException("文件不对,必须是excel文件,后缀名以:"+EXCEL_XLS_SUFFIX + " 或者 "+ EXCEL_XLSX_SUFFIX);
    	}
    	
    	
    	/**
    	 * description: 读取03版excel
    	 * @param file
    	 * @return List<List<Object>>
    	 * @version v1.0
    	 * @author w
    	 * @date 2020年3月31日 下午3:38:44
    	 */
    	private static List<List<Object>> readXls(InputStream inputStream) throws Exception {
    		List<List<Object>> list = new ArrayList<>();
    		// 读取excel 
    		HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
    		// 获取sheet 页数量
    		int sheets = workbook.getNumberOfSheets();
    		for(int num = 0 ; num < sheets ; num++ ) {
    			HSSFSheet sheet = workbook.getSheetAt(num);
    			if(null == sheet) {
    				continue ;
    			}
    			// sheet 页的总行数
    			int rows = sheet.getLastRowNum();
    			// startRow 开始读取的行数 --- 第二行开始读
    			for( int startRow = 1 ;startRow <= rows  ; startRow ++) {
    				HSSFRow row = sheet.getRow(startRow);
    				List<Object> rowList = new ArrayList<>();
    				if(null != row) {
    					// row 行中的 单元格总个数
    					short cells = row.getLastCellNum();
    					for(int x = 0 ; x <= cells ; x++) {
    						HSSFCell cell = row.getCell(x);
    						if(null == cell) {
    							rowList.add("");
    						}else {
    							rowList.add(getXlsValue(cell));
    						}
    					}
    					list.add(rowList);
    				}
    			}
    		}
    		return list;
    	}
    	
    	/**
    	 * description: 获取 03 版 excel数据 
    	 * @param cell
    	 * @return String
    	 * @version v1.0
    	 * @author w
    	 * @date 2020年3月31日 下午3:54:14
    	 */
    	private static String getXlsValue(HSSFCell cell) {
    		if ( cell.getCellType() == cell.CELL_TYPE_BOOLEAN) {  
                return String.valueOf(cell.getBooleanCellValue());  
            } else if (cell.getCellType() == cell.CELL_TYPE_NUMERIC) {  
                String cellValue = "";  
                if(HSSFDateUtil.isCellDateFormatted(cell)){                  
                    Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());  
                    cellValue = new SimpleDateFormat("yyyy/MM/dd").format(date);  
                }else{  
                    DecimalFormat df = new DecimalFormat("#.##");  
                    cellValue = df.format(cell.getNumericCellValue());  
                    String strArr = cellValue.substring(cellValue.lastIndexOf(POINT)+1,cellValue.length());  
                    if(strArr.equals("00")){  
                        cellValue = cellValue.substring(0, cellValue.lastIndexOf(POINT));  
                    }    
                }  
                return cellValue;  
            } else {  
    	       	// 其他类型的值,统一设置为 string 
    	       	// http://blog.csdn.net/ysughw/article/details/9288307 
            	cell.setCellType(Cell.CELL_TYPE_STRING);
               return String.valueOf(cell.getStringCellValue());  
            }  
    	}
    
    	/**
    	 * description: 读取07或以上版本的 excel 
    	 * @param file
    	 * @throws Exception
    	 * @return List<List<Object>>
    	 * @version v1.0
    	 * @author w
    	 * @date 2020年3月31日 下午4:01:25
    	 */
    	private static List<List<Object>> readXlsx(InputStream inputStream) throws Exception {
    		List<List<Object>> list = new ArrayList<>();
    		// 读取excel ,封装到 XSSFWorkbook 对象 
    		XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
    		int sheets = workbook.getNumberOfSheets();
    		for(int num = 0 ;num < sheets ; num++) {
    			XSSFSheet sheet = workbook.getSheetAt(num);
    			if(null == sheet) {
    				continue ;
    			}
    			// 获取sheet页的总行数
    			int rows = sheet.getLastRowNum();
    			for(int startRow = 1 ; startRow <= rows ; startRow++ ) {
    				// startRow 开始读取的行数, 从第二行开始读取
    				XSSFRow row = sheet.getRow(startRow);
    				List<Object> rowList = new ArrayList<>();
    				if(null != row) {
    					// 获取行总单元格个数
    					short cells = row.getLastCellNum();
    					for(int x = 0 ; x < cells ; x++) {
    						XSSFCell cell = row.getCell(x);
    						if(cell == null) {
    							rowList.add("");
    						}else {
    							rowList.add(getXlsxValue(cell));
    						}
    					}
    					list.add(rowList);
    				}
    			}
    		}
    		return list;
    	}
    
    	/**
    	 * description: 获取07或以上版本 excel 数据
    	 * @param cell
    	 * @return Object
    	 * @version v1.0
    	 * @author w
    	 * @date 2020年3月31日 下午4:09:03
    	 */
    	private static Object getXlsxValue(XSSFCell cell) {
    		if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
    			return String.valueOf(cell.getBooleanCellValue());
    		} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
    			String cellValue = "";
    			if (DateUtil.isCellDateFormatted(cell)) {
    				Date date = DateUtil.getJavaDate(cell.getNumericCellValue());
    				cellValue = new SimpleDateFormat("yyyy/MM/dd").format(date);
    			} else {
    				DecimalFormat df = new DecimalFormat("#.##");
    				cellValue = df.format(cell.getNumericCellValue());
    				String strArr = cellValue.substring(cellValue.lastIndexOf(POINT) + 1, cellValue.length());
    				if (strArr.equals("00")) {
    					cellValue = cellValue.substring(0, cellValue.lastIndexOf(POINT));
    				}
    			}
    			return cellValue;
    		} else {
    			// 其他类型的值,统一设置为 string 
            	// http://blog.csdn.net/ysughw/article/details/9288307 
    			//cell.setCellType(Cell.CELL_TYPE_STRING);
    			return String.valueOf(cell.getStringCellValue());
    		}
    	}
    }

    2、测试,直接本地测试 :

    @Test
    public void test() {
        String path = "F:\\poi导出2.xlsx" ;
        File file = new File(path);
        try {
            List<List<Object>> importFile = ExcelImport.importFile(file);
            System.out.println(importFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

     

    3、查看控制中输出的数据和excel中的是否一致。

     

    三、总结

    1、本示例使用的是 poi 3.15版的,其他版本可能需要做部分调整。

    2、对于导入excel数据类型转换,不一定考虑到全部,请根据实际业务情况调整。

    3、web情况下导入,请自行创建页面测试,ExcelImport 类中已经提供对应的方法支持。

    4、需要源码请私聊我,谢谢。

     

     

    展开全文
  • 主要介绍了java 导入Excel思路及代码示例,简要分析了设计思路,然后分享了实例代码,具有一定参考价值,需要的朋友可以了解下。
  • java导入excel

    2015-04-21 14:49:35
    java excel导入数据库 所需的架包和相应的代码
  • java导入excel工具jar包

    2013-10-12 10:47:39
    java导入excel工具包2.0。修改了许多BUG,增加了许多功能
  • JAVA导入Excel脚本

    2013-12-23 17:07:49
    JAVA上传读取Excel脚本源码,非常好用
  • java导入excel文件.txt

    2020-01-09 11:09:46
    java实现页面导入excel文件,保存excel文件到数据库,有需要在页面上导入一个excel表的同学可以借鉴
  • java导入Excel需要的jar包
  • java POI导入excel 单元格为时(null)导入报指针异常错误 相应Struts Problem Report Struts has detected an unhandled exception: 使用poi导入excel表格,遍历到单元格时报错,结合网上的解决方法进行了...

    java POI导入excel 单元格为空时(null)导入报空指针异常错误 相应Struts Problem Report Struts has detected an unhandled exception:

    使用poi导入excel表格,遍历到空单元格时报错,结合网上的解决方法进行了修改,解决了错误

    			Cell cell = row.getCell(1);
                if (cell == null) {
                    row.createCell(1);
                } else {
                //当单元格内容为数字时,转换为字符格式
                    row.getCell(1).setCellType(Cell.CELL_TYPE_STRING);
                    System.out.println(row.getCell(1).getStringCellValue());
                }
    
    展开全文
  • java导入Excel 所需的jar包 内含 poi , jxl , dom4j , xmlbeans
  • 导入数据这边总是不熟悉,大家有没有Java导入 excel 表格到数据库的例子,详细一点,谢谢热心人啦
  • if(row.getCell(i) == null){//单元格没有值(等于null)时,getCell方法获取不到单元格,要用createCell方法。 row.createCell(i).setCellValue(new HSSFRichTextString(String.valueOf(resultList.get(i))));...

     

    if(row.getCell(i) == null){//单元格没有值(等于null)时,getCell方法获取不到单元格,要用createCell方法。
        row.createCell(i).setCellValue(new HSSFRichTextString(String.valueOf(resultList.get(i))));
    }else {//单元格有值时,getCell方法获获取到单元格。
        row.getCell(i).setCellValue(new HSSFRichTextString(String.valueOf(resultList.get(i))));   
    }

    单元格没有值时,getCell方法获取不到单元格,此时要用createCell方法!

    文章来源:https://blog.csdn.net/sinat_34276971/article/details/80083119

    展开全文
  • 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

    2017-12-13 15:18:21
    Java导入excel文件,里面是一个完整的Java项目,包括了需要的jar包
  • java导入导出excel

    2018-03-29 13:56:07
    java 导入exce 导出excel 这里面分别一个几个方式的导入导出集合
  • java导入Excel表格数据

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

    2019-03-24 02:25:08
    NULL 博文链接:https://yunhuii.iteye.com/blog/1097452
  • Java导入Excel数据方法

    千次阅读 2017-09-16 19:45:28
    今天早上朋友让我帮她算一个数学建模中的数据,因为我...Apache POI导入excel数据,需要实现导入的包。 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能
  • java web Excel导入数据库java web Excel导入数据库 java web Excel导入数据库java web Excel导入数据库
  • Java导入Excel工具类使用教程

    千次阅读 热门讨论 2019-03-26 11:06:43
    本工具类提供了Excel导入功能,通过反射机制将Excel中数据映射到实体类中,从而获取Excel数据,工具类依赖`org.apache.poi`包。支持RESTful API,支持Spring MVC中使用。 本工具类支持功能: - 支持File类型导入 ...
  • Java导入Excel文件返回数据对应属性类字段,Java导出Excel文件如何让数据对应指定的标题字段-附件资源
  • java编程,通过读取excel文件获取其中的内容,需要引用的jar包
  • Java读取excel文件工具包 导入以下两个依赖 读取excel文件出现出现异常 java.lang.NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap 这是缺少commons-collections4,导入依赖就行了 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,434
精华内容 15,773
关键字:

java导入excel判空

java 订阅