黑马程序员技术交流社区

标题: 工具类抽取之使用POI读取Excel [打印本页]

作者: 大山哥哥    时间: 2017-5-31 21:50
标题: 工具类抽取之使用POI读取Excel
本帖最后由 大山哥哥 于 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);
                                                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");
    }

作者: 烽火狼烟    时间: 2017-6-2 08:36
厉害了我的哥  虽然看不太懂
作者: shuaiqijie    时间: 2017-6-2 21:34
看看,学习学习

作者: wthandsome    时间: 2017-6-3 19:22
厉害了我的哥 ...  大神就是厉害.....
作者: wthandsome    时间: 2017-6-5 21:54
厉害厉害! 实用!!
作者: _xiaoe    时间: 2017-6-6 23:51
实用。收下了
作者: feifei295    时间: 2017-6-7 09:47
终于可以评论了,先水一下!
作者: feifei295    时间: 2017-6-7 09:47
请收下我的膝盖!
作者: 醉酒思凡尘    时间: 2017-6-7 13:25
厉害啦老铁





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2