Java的XSSFWorkbook和XSSFSheet处理Excel(偷偷告诉同学们。。。)

XSSFWorkbook、XSSFSheet对xlsx和xls都支持

public class ExcelUtil {

private Map<String,Integer> map;

//工作簿
private XSSFWorkbook xssfWorkbook = null;

//工作表
private XSSFSheet xssfSheet = null;

public ExcelUtil(){

}

//获取工作簿和工作表
public ExcelUtil(InputStream inputStream, String sheetName){
    try {
        xssfWorkbook = new XSSFWorkbook(inputStream);
        xssfSheet = xssfWorkbook.getSheet(sheetName);
    } catch (IOException e) {
        e.printStackTrace();
    }

}

//test
public void readFirstRowFirstCell(){
    XSSFRow row = xssfSheet.getRow(0);
    String str = row.getCell(2).toString().substring(0,9);
    System.out.println(str);
}


//有不及格科目学生 返回不及格学生人数
public int findFailStudent(int majorIDColumn,int scoreColumn,int nameColumn,String majorID){
    //存储有不及格科目学生的名字和不及格门数
    map = new HashMap<>();
    float score;
    String rowMajorID;

    int rows = xssfSheet.getPhysicalNumberOfRows();
    for(int i=0;i<rows;i++){
        XSSFRow row = xssfSheet.getRow(i);

        //班级号
        String cell = row.getCell(majorIDColumn).toString();
        //获得专业号
        if(cell.length() == 10)
            rowMajorID = cell.substring(0,9);
        else continue;
        if(rowMajorID.equals(majorID)){
            //获得姓名
            String name = row.getCell(nameColumn).toString();
            //获得成绩
            String scoreStr = row.getCell(scoreColumn).toString() ;
            //匹配非负数
            if(scoreStr.matches("\\d+|(\\d+\\.\\d+)")) {
                score = Float.parseFloat(scoreStr);
                if(score < 60){
                    addFailStudent(map,name);
                }
            }
            else {
                if(scoreStr.equals("不及格"))
                    addFailStudent(map,name);
            }
        }else continue;
    }

    for(String key : map.keySet()){
        System.out.println("姓名:"+key+" 不及格门数:"+map.get(key));
    }
    System.out.println("两门及以上不及格人数:"+moreThan2FailSubject(map));
    return map.size();
}

//添加不及格学生
public void addFailStudent(Map<String,Integer> map,String name){
    if(!map.containsKey(name)){
        map.put(name,1);
    }else {
        int subjects = map.get(name);
        map.put(name,subjects+1);
    }
}

//返回两门及以上不及格人数
public int moreThan2FailSubject(Map<String,Integer> map){
    int count = 0;
    for(String key : map.keySet()){
        if(map.get(key) >= 2){
            count++;
        }
    }
    return count;
}

//输出绩点满足但有不及格科目的同学名字(绩点满足的同学已经准备好)
public int pointButFailSubject(Set<String> set){
    System.out.println("======================\n绩点满足但有不及格科目的同学名字:");
    int count = 0;
    for(String name : map.keySet()){
        if(set.contains(name)){
            count++;
            System.out.println(name);
        }
    }
    return count;
}

public void sportScore(int course, int scoreColumn,int nameColumn, Set<String> names){
    System.out.println("====================");
    //存储同学们的体育成绩
    map = new HashMap<>();
    int score;
    int rows = xssfSheet.getPhysicalNumberOfRows();
    for(int i=0;i<rows;i++){
        XSSFRow row = xssfSheet.getRow(i);
        //体育成绩
        String sportSco = row.getCell(scoreColumn).toString();
        if(sportSco.matches("\\d+|(\\d+\\.\\d+)")){//85.0
            float tmp = Float.parseFloat(sportSco);
            score = (int) tmp;
        }
        else continue;
        //姓名
        String name = row.getCell(nameColumn).toString();
        //课程名
        String couName = row.getCell(course).toString();
        if(couName.length() > 2)
            couName = couName.substring(0,2);
        if(names.contains(name) && couName.equals("体育")){
            map.put(name,score);
        }
    }
    for(String key : map.keySet()){
        System.out.println("姓名:"+key+" 体育成绩:"+map.get(key));
    }
    names.removeAll(map.keySet());
    System.out.println("剩下的同学没有体育成绩:");
    for(String name : names){
        System.out.print(name+" ");
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值