A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大山哥哥 于 2017-5-31 21:54 编辑

本次抽取的工具类是根据传入的excel文件路径和要将该文件读取后封装的实体类Class、字段名称,将excel中的数据封装到实体集合中。
[Java] 纯文本查看 复制代码
/**
	 * @param path excel文件路径
	 * @param clazz	要封装的实体类Class对象
	 * @param args	字段名称
	 */
	public List importXls(String path,Class clazz,String ...args){
		List<Object> list = new ArrayList<Object>();
		try {
			//返回结果数据集合
			Object realObj = clazz.newInstance();
			Sheet sheet = getExcelSheet(path);
			for (Row row : sheet) {
				System.out.println(row.getRowNum() + "----" +row);
				if(row.getRowNum() > 0){
					for (int i = 0; i < args.length; i++) {//传入的参数列表进行遍历"id","username","gender"
						//读取Cell
						Field field = clazz.getDeclaredField(args[i]);
						field.setAccessible(true);
//						field.getType();
						Cell cell = row.getCell(i);//得到当前行的第i+1个Cell
						String cellValue = getCellStringValue(cell);//此处将所有类型都转换成了字符串进行处理
						field.set(realObj, cellValue);
					}
					list.add(realObj);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}


[Java] 纯文本查看 复制代码
/**
         * 根据不同的文件后缀名得到不同版本的Workbook对象,返回其sheet对象
         * @param filePath
         * @return
         * @throws Exception
         */
        private Sheet getExcelSheet(String filePath) throws Exception {
                // 1、加载Excel文件
                Workbook workbook = null;
                if(filePath.matches("^.+\\.(?i)(xls)$")){
                        workbook = new HSSFWorkbook(new FileInputStream(filePath));//xls后缀
                }else if(filePath.matches("^.+\\.(?i)(xlsx)$")){
                        workbook = new XSSFWorkbook(new FileInputStream(filePath));//
                }
                // 2、加载第一个sheet页
                Sheet sheet = workbook.getSheetAt(0);
                return sheet;
        }


[Java] 纯文本查看 复制代码
/**
         * 获取表格内数据
         * @param cell
         * @return
         */
        private String getCellStringValue(Cell cell) {
                String cellValue;
                switch (cell.getCellType())  
        {  
            case Cell.CELL_TYPE_NUMERIC: // 数字  
                cellValue = (int)cell.getNumericCellValue() + "";  
                break;  

            case Cell.CELL_TYPE_STRING: // 字符串  
                cellValue = cell.getStringCellValue();  
                break;  

            case Cell.CELL_TYPE_BOOLEAN: // Boolean  
                cellValue = cell.getBooleanCellValue() + "";  
                break;  

            case Cell.CELL_TYPE_FORMULA: // 公式  
                cellValue = cell.getCellFormula() + "";  
                break;  

            case Cell.CELL_TYPE_BLANK: // 空值  
                cellValue = "";  
                break;  

            case Cell.CELL_TYPE_ERROR: // 故障  
                cellValue = "非法字符";  
                break;  
            default:  
                cellValue = "未知类型";  
                break;  
        }
                return cellValue;
        }


main方法测试:
public static void main(String[] args) {
        new ExcelUtil().importXls("f:/User.xlsx", new User().getClass(), "id","username","gender");
    }

8 个回复

倒序浏览
厉害了我的哥  虽然看不太懂
回复 使用道具 举报
回复 使用道具 举报
厉害了我的哥 ...  大神就是厉害.....
回复 使用道具 举报
厉害厉害! 实用!!
回复 使用道具 举报
实用。收下了
回复 使用道具 举报
终于可以评论了,先水一下!
回复 使用道具 举报
请收下我的膝盖!
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马