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

浙公网安备 33010602011771号