java POI 解析excel 2003和2007 直接转为List<Map> 返回

本文介绍了一种使用Apache POI库将Excel文件转换为Java List集合的方法。具体步骤包括:从Apache POI官网下载并引入3.5版本以上的jar包;通过指定字符串数组、Excel文件路径及工作表编号来读取数据;最终将每行数据转化为Map并存储在List中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.POI 官网下载jar包,3.5以上

2.项目导入jar包

3.参数:String数组--对应的excel列名对应的KEY,File  excel文件,sheetNumber ---excel的sheet位置 0开始

public static List getExcelToList(String[]columnList,File path,int sheetNumber)throws Exception{
        
        List resultList =new ArrayList();
        try {
            
            //解析excel  2003 xls/2007 xlsx
            Workbook wookbook=WorkbookFactory.create(new FileInputStream(path));
            //获取excel的sheet位置
            Sheet sheet=wookbook.getSheetAt(sheetNumber);
            //获取行数
            //int rowNum=sheet.getPhysicalNumberOfRows();
            int rownum=sheet.getLastRowNum();
            //若行数为1 ,即只有行抬头,没有数据则返回
            if(rownum<1){
                return resultList;
            }
            //遍历行
            for(int r=1;r<=rownum;r++){
                Map rowMap=new HashMap();
                //获取行
                Row row=sheet.getRow(r);
                if(row==null){
                    continue;
                }
                //遍历单元格cell
                for(short c=0;c<row.getLastCellNum();c=(short) (c+1)){
                    
                    Cell cell=row.getCell(c);
                    Object object=getCellInfo(cell);
                    rowMap.put(columnList[c],object);
                }
                resultList.add(rowMap);
            }
            return resultList;
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }
    
    
    
    /**
     * 
     * @Title: getCellInfo
     * @Description:返回单元格对应的值
     * @param cell
     * @return
     */
    public static Object getCellInfo(Cell cell){
        
        Object resultObject=null;
        if(cell!=null){
            //单元格数据类型
            int cellType=cell.getCellType();
            switch (cellType) {
            //值为空白
            case Cell.CELL_TYPE_BLANK: 
                resultObject=null;
                break;
            //值为布尔
            case Cell.CELL_TYPE_BOOLEAN:
                resultObject=cell.getBooleanCellValue();
                break;
            //错误
            case Cell.CELL_TYPE_ERROR:
                resultObject=null;
                break;
            //值为String
            case Cell.CELL_TYPE_STRING:
                //resultObject=cell.getStringCellValue();
                resultObject=cell.getRichStringCellValue().toString();
                break;
            //值为数值或者日期
            case Cell.CELL_TYPE_NUMERIC:
                if(DateUtil.isCellDateFormatted(cell)){
                    double d=cell.getNumericCellValue();
                    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
                    Date tempDate=DateUtil.getJavaDate(d);
                    resultObject=sdf.format(tempDate);
                }else{
                    String ser = String.format("%20.2f", new Object[] { Double
                            .valueOf(cell.getNumericCellValue()) });
                    String ser2 = String.format("%20.0f", new Object[] { Double
                            .valueOf(cell.getNumericCellValue()) });
                    String fs = ser2.trim() + ".00";
                    if(fs.equals(ser.trim())){
                        resultObject=ser2.trim();
                    }else {
                        resultObject=ser.trim();
                    }
                    
                }
                break;
            //公式
            case Cell.CELL_TYPE_FORMULA:
                resultObject=Double.valueOf(cell.getNumericCellValue());
                break;
            default:
                System.out.println("枚举了所有类型");
                
            }
        }
        return resultObject;
    }
    

新手第一次发博,不对之处请指出~~~

转载于:https://www.cnblogs.com/yueguangmoliya/p/5717818.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值