使用POI操作Excel的一个实例
朋友让我帮忙统计一个Excel,内容见附件 1.xls
需求是这样的:这个Excel文件一共有31个Sheet,每个Sheet记录了所有员工的登录情况,第1个Sheet是1月1号的登录情况,第2个Sheet是1月2号的登录情况,以此类推……有一种特殊情况是员工1天可能会登录多次。现在需要统计所有员工的登录天数
我的思路是这样的:每天的登录情况用一个Map来保存,借助Map的key值是没有重复的原则。总的登录情况再用一个Map来保存,从1号循环到31号,如果当天有登录,登录天数加1,最终得出每个员工登录的天数,下面是代码部分:
Map<String, Integer> map = new LinkedHashMap<String, Integer>(); try { InputStream inp = FileUtils.openInputStream(new File("c:\\1.xls")); Workbook wb = WorkbookFactory.create(inp); for (int i = 0; i < 31; i++) { Sheet sheet = wb.getSheetAt(i); Map<String,Boolean> sheetMap = new HashMap<String,Boolean>(); for (Iterator<Row> iterator = sheet.rowIterator(); iterator.hasNext();) { Row row = (Row) iterator.next(); String s = row.getCell(1).getStringCellValue(); sheetMap.put(s, true); } for (Iterator<String> iterator = sheetMap.keySet().iterator(); iterator.hasNext();) { String type = (String) iterator.next(); if(map.containsKey(type)) { map.put(type, map.get(type)+1); } else { map.put(type, 1); } } } for (Iterator<String> iterator = map.keySet().iterator(); iterator.hasNext();) { String type = (String) iterator.next(); System.out.println(type + " " + map.get(type)); } } catch (Exception e) { e.printStackTrace(); }
FileUtils.openInputStream代码部分用的是apache commons包的内容
POI我使用的版本是3.6
执行代码,会按照“姓名 登录天数”输出到控制台
本来是要把统计结果输出到Excel的,我偷了个懒,直接把控制台输出的内容复制到一个文本文件,然后用Excel打开这个文本文件,另存为Excel文件,大功告成!