使用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文件,大功告成!

posted @ 2011-02-05 21:35  魔豆  阅读(1038)  评论(0编辑  收藏  举报