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

求大神给一个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) {
                    //转换错误,抛出异常
                }
            }
        }
    }
    

    }

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

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀