import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class daochudaoexcel {
public static void main(String[] args) throws BiffException, IOException, ParseException {
String fileName = "D://Io//jisuan.xls"; // Excel文件所在路径
File file = new File(fileName); // 创建文件对象
Workbook wb = Workbook.getWorkbook(file); // 从文件流中获取Excel工作区对象(WorkBook)
Sheet sheet = wb.getSheet(0); // 从工作区中取得页(Sheet)
int n =0;
int j =0;
int f = 0;
Date max = null;
String Stringmax = null;
String Stringmin = null;
String zgs = "总公司";
DateFormat df = new SimpleDateFormat("HH:mm:ss");
//规定早上最晚打卡时间
Date time = df.parse("10:00:00");
while(n<sheet.getRows()){
//如果是总公司
if(sheet.getCell(0,n).getContents().equals(zgs)){
//如果姓名相等
if(sheet.getCell(1,n).getContents().equals(sheet.getCell(1,n+1).getContents())){
//如果日期相等
if(sheet.getCell(2,n).getContents().equals(sheet.getCell(2,n+1).getContents())){
//如果第n个时间小于n+1,那么将max等于n+1
if(df.parse(sheet.getCell(3,n).getContents()).getTime()<df.parse(sheet.getCell(3,n+1).getContents()).getTime() ){
max=df.parse(sheet.getCell(3,n+1).getContents());
//将max转成String
Stringmax = sheet.getCell(3,n+1).getContents();
}
}else {
//如果日期不相等那么下个日期的第一个打卡时间 就是min
Date min= df.parse(sheet.getCell(3,n+1).getContents());
//将min转为String类型
Stringmin = sheet.getCell(3,n+1).getContents();
//如果最早打卡时间大于规定早上最晚打卡时间 那么则判定为迟到
if(min.getTime()>time.getTime()){
System.err.print("迟到");
//如果上班时间大于小于八个小时 则说明早退
}else if((max.getTime()-min.getTime())/3600000<8){
System.err.print("早退");
}
//输出员工上班下班时间 和上班多少小时
System.out.println(sheet.getCell(0,n).getContents()+"员工:" +sheet.getCell(1,n).getContents()+sheet.getCell(2,n+1).getContents() + " "+ "上班时间:" + Stringmin + " " + "下班时间" + Stringmax + "上班了" + " " +(max.getTime()-min.getTime())/3600000 + "个小时" );
}
}
}
n++;
}
}
}
需求是输出这个人最早上班时间 最晚下班时间和是否迟到早退 我的逻辑是先判断第一列是不是相等 再判断第二列是否相等 直到判断到日期相等 然后遍历最大的时间替换为max 因为打卡时间是按照从早到晚排列的 到了下一天 那么下一天的第一个打卡时间是最早打卡时间 但是这样第一天的也就是表格中的第一天自动给略过了 因为第一天没有在else中判断 这个怎么解决 新手 请各位大牛帮帮忙 谢谢