如果丶没有 2015-11-26 06:10 采纳率: 100%
浏览 2301
已采纳

求大神给一个poi的封装好的工具类

就是用的时候传进去一个实现类方法和excel名字,以前的硬盘丢了,谢谢大神!
(导入)(导出)

  • 写回答

1条回答 默认 最新

  • GrowingDarker 2015-11-26 06:54
    关注

    @Test
    public void getCheckInPersonList(){
    String filePath = new String("E:\2014年龙居山9月考勤.xls");
    File file = new File(filePath);
    if(file.exists()){
    if(file.getName() != null){
    String suffix = file.getName().substring(file.getName().lastIndexOf(".")+1);
    if("xls".equals(suffix))
    for (CheckInPersonBean p : readXLS(file)) {
    System.out.println("ID:"+p.getId()+" 单位:"+p.getUnit()+" 姓名:"+p.getName()+" 时间:"+p.getWorkDate()+" 上班打卡时间:"+p.getWorkStartTime()+" 下午打卡时间:"+p.getWorkEndTime());
    }
    }
    }
    }

    public List<CheckInPersonBean> readXLS(File file){
        List<CheckInPersonBean> personBeanList = new ArrayList<CheckInPersonBean>();
        try {
            InputStream is = new FileInputStream(file);
            HSSFWorkbook workbook = new HSSFWorkbook(is);
            if(workbook != null){
                //getNumberOfSheets 得到工作表数量
                //System.out.println(workbook.getNumberOfSheets()+"工作表数量");
                for(int i=0;i<workbook.getNumberOfSheets();i++){
                    //getSheetAt(i) 循环得到第i张工作表
                    HSSFSheet sheet = workbook.getSheetAt(i);
                    if(sheet != null){
                        //getLastRowNum() 得到工作表中最后一行号
                        //System.out.println("第"+(i+1)+"张表最后一个行号是:"+sheet.getLastRowNum());
                        CheckInPersonBean personBean = null;
                        for(int j=1;j<=sheet.getLastRowNum();j++){
                            //getRow(j) 得到第j行数据
                            HSSFRow row = sheet.getRow(j);
                            //得到行最后一个单元格数字    getLastCellNum  该表中第j行最后一个单元格号(只要是单元格就计算,不论内值是否有效)
                            if(row != null && row.getLastCellNum() >= 9){
                                personBean = new CheckInPersonBean();
                                setData(row.getCell(0), personBean, "i");
                                personBean.setUnit(String.valueOf(row.getCell(1)));
                                personBean.setName(String.valueOf(row.getCell(4)));
                                setData(row.getCell(5), personBean, "y");
                                setData(row.getCell(6), personBean, "t");
                                setData(row.getCell(8), personBean, "t");
                                personBeanList.add(personBean);
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            System.err.println(e);
        }
        return personBeanList;
    }
    
    public Object setDataByType(HSSFCell cell,String methodName,Class<?> paramType,Object obj){
        try {
            Class<?> clazz = obj.getClass();
            Method method = clazz.getMethod(methodName,paramType);
            switch (cell.getCellType()) {
                //0  double, 1 String 3 空白,4 boolean 5 错误
                case 0: 
                    if("setId".equals(methodName)) method.invoke(obj, String.valueOf((int)cell.getNumericCellValue()));
                    break;
                case 1: method.invoke(obj, cell.getStringCellValue()); break;
                case 3: method.invoke(obj, String.valueOf(cell)); break;
                case 4: method.invoke(obj, cell.getBooleanCellValue()); break;
                case 5: method.invoke(obj, ""); break;
                default:
                    method.invoke(obj, new SimpleDateFormat("yyyy-MM-dd"),cell);
                    break;
            }
        } catch (Exception e) {
        }
        return obj;
    }
    public Class<?> getClazz(HSSFCell cell){
        switch (cell.getCellType()) {
            case 0: return double.class;
            case 1: return String.class;
            case 3: return String.class;
            case 4: return boolean.class; 
            case 5: return String.class; 
            default:
                break;
        }
        return Date.class;
    }
    //setDataByType(row.getCell(0), "setId",getClazz(row.getCell(0)),personBean);
    
    public void setData(HSSFCell cell,CheckInPersonBean bean,String sign){
        if("i".equals(sign)){
            if(cell.getCellType() == cell.CELL_TYPE_NUMERIC && cell != null){
                bean.setId(String.valueOf((int)cell.getNumericCellValue()));
            }
        }else if("y".equals(sign)){
            if(cell != null && cell.getCellType() == cell.CELL_TYPE_STRING){
                try {
                    bean.setWorkDate(new SimpleDateFormat("yyyy-MM-dd").parse((String.valueOf(cell).replace(".", "-"))));
                } catch (ParseException e) {
                    //转换错误,抛出异常
                }
            }
        }else{
            if(cell != null && cell.getCellType() == cell.CELL_TYPE_STRING){
                try {
                    bean.setWorkStartTime(new SimpleDateFormat("mm:HH:ss").parse((String.valueOf(cell))));
                } catch (ParseException e) {
                    //转换错误,抛出异常
                }
            }
        }
    }
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大