📄 doexcel.java
字号:
package Bean;
import java.io.*;
import java.net.*;
import java.util.*;
import jxl.*;
import jxl.read.biff.BiffException;
import java.io.IOException;
import java.io.File;
public class doExcel
{
//文件名filename,如filename=34060817_付文刚_4_5_时间过程数据_06_10_11.xls
private String filename;
//绝对路径url,如url=D:/upload/340608/34060817/34060817_付文刚_4_5_时间过程数据_06_10_11.xls
private String url;
//theResponse用来存储判断的结果,如“XX数据分析成功”“XX数据分析失败”,返回的是一个总的结果
private String theRespone="";
// RightOrWrang用来表示判断的正确性,如果错了则为0
private int RightOrWrang=1;
//myNum用来存储总数据
private String myNum;
private String pathInfo;
private String startTime;
//zz用来存储小组的总数据
private int zz=0;
private setExcel aSetExcel;
public doExcel()
{
}
public void doPost()
{
Workbook myworkbook = null;
try
{
//打开表
myworkbook = Workbook.getWorkbook(new File(url));
} catch (BiffException ex) {
theRespone="出现异常!文件不存在!";
} catch (IOException ex) {
theRespone="出现异常!文件不存在!";
}
int sheets = myworkbook.getNumberOfSheets();
//循环取得Excel中的每一张sheet,即为每一个成员的数据
for(int jj=1;jj<sheets;jj++)
{
int theAnswer=1;
//取得第jj个成员的sheet表mysheet
Sheet mysheet = myworkbook.getSheet(jj);
String myname=mysheet.getName();
String s[][]=new String[15][4];
//定义一个15行4列的二维数组,提取表中的时间数据,分别为“起始时间”,“结束时间”,“中断时间”,“每一行的总数据”
for(int k=0;k<15;k++)
{
boolean pp=true;
for(int l=0;l<4;l++)
{
//取得每一个格子的数据
Cell a1 = mysheet.getCell(l+7,k+1);
String s3 = a1.getContents().toString();
//碰到空格,即为该个人的数据读完毕,跳出
if(s3.equals("")||s3.equals(null))
{
pp=false;
break;
}
s[k][l]=s3;
}
if(pp==false)
break;
}
//对取得的改成员的数据进行判断,看是否计算有错
for(int k=0;k<15;k++)
{
//遇到空格,则表示数据盘度完毕,跳出
if(s[k][0]==null||s[k][0]=="")
break;
//y为取得的单行时间总数
//调用validate()函数将表格内的时间如13:10:00转换成整型数分钟如13×60+10+0;
//xx为计算得的单行时间总数,=“结束时间”-“起始时间”-“间隔时间”
try
{
int yy=Integer.parseInt(s[k][3]);
int xx = validate(s[k][1])-validate(s[k][0])-Integer.parseInt(s[k][2]);
//如果yy!=xx则说明这一行数据计算错了,停止计算
if(yy!=xx)
{
RightOrWrang=0;
theAnswer=0;
break;
}
//如果正确则将结果累加到zz中
zz=zz+yy;
//循环读入改成员得每一行数据作判断,直到其数据全判断了
}
catch(Exception e1)
{
RightOrWrang=0;
theAnswer=0;
theRespone=theRespone+"<p align=\"center\" ><font color=\"#FF0000\">"+myname+"时间格式不对!</font></p></h1>"+"<p align=\"center\" ><font color=\"#FF0000\">如时间格式不是13:00:00格式<br>或则是他的sheet表中最后一行数据未与后面的老师给的“说明行”分割开,至少需留有一行空白</font>";
break;
}
}
//如果出错,theRespone中加上一句“XX数据计算有错",颜色为红色
if(theAnswer==0)
{
// theRespone=theRespone+myname+"数据分析有错<br>";
theRespone=theRespone+"<p align=\"center\"><font color=\"#FF0000\">"+myname+"数据计算有错"
+"</font></p>";
}
else
{
//如果正确,theRespone中加上一句“XX数据计算正确",颜色为黑色
// theRespone=theRespone+myname+"数据分析成功<br>";
theRespone=theRespone+"<p align=\"center\"><font color=\"#000000\">"+myname+"数据计算成功"
+"</font></p>";
}
//循环读入每一个成员数据,直到所有成员得都读完则跳出循环
}
//如果每个成员数据无误,则读取汇总表进行判断
if(RightOrWrang==1)
{
//读取汇总表
Sheet mysheet1 = myworkbook.getSheet(0);
String sss[][]=new String[6][2];
//将汇总表中得个人总数据及小组总数据读入二维数组sss[][]中
for(int k=0;k<6;k++)
{
boolean ppp=true;
for(int l=0;l<2;l++)
{
Cell a1 = mysheet1.getCell(l+3,k+1);
String ss1 = a1.getContents().toString();
if(ss1.equals("")||ss1.equals(null))
{
ppp=false;
break;
}
sss[k][l]=ss1;
}
}
int y=0;
//将个人总数据累加得到 y
for(int k=0;k<6;k++)
{
if(sss[k][0]==null||sss[k][0]=="")
break;
int z=Integer.parseInt(sss[k][0]);
y=y+z;
}
myNum=sss[0][1];
//取得的总数据为myNum,若y!=sss[0][1] (即myNum) 则说明汇总时计算出错
if(y!=Integer.parseInt(sss[0][1]))
{
RightOrWrang=0;
// theRespone=theRespone+" 总数计算有错!"+"<br>";
theRespone=theRespone+"<p align=\"center\"><font color=\"#FF0000\">小组数据汇总时计算有错!</font></p>";
}
//如果汇总时计算无误,在比较 y 与先前计算的总数zz比较,以判断单个成员的总时间是否计算出错
else if(y!=zz)
{
RightOrWrang=0;
theRespone=theRespone+"<p align=\"center\"><font color=\"#FF0000\">数据统计有错,可能是某个成员总时间计算有错!</font></p>";
}
else
{
theRespone=theRespone+"<p align=\"center\"><font color=\"#000000\">总数计算成功!</font></p>";
}
}
//如果一切无误,则进行填表操作,将总数据填入班级时间数据汇总表中
if(RightOrWrang==1)
{
try
{
aSetExcel=new setExcel(filename);
}
catch(Exception e2)
{
RightOrWrang=0;
theRespone=theRespone+"<p align=\"center\"><font color=\"#FF0000\">命名方式不对,请检查后再提交!</font></p>";
}
aSetExcel.setMynumble(myNum);
//传递配置文件中“路径信息”“开始时间”
aSetExcel.setPathInfo(pathInfo);
aSetExcel.setStartTime(startTime);
//填表
aSetExcel.updateExcel();
//如果填表失败则显示失败
if(aSetExcel.getSucceed()==0)
{
RightOrWrang=0;
theRespone=theRespone+"<p align=\"center\"><font color=\"#FF0000\">数据无误,但系统内总表正被打开导致无法填入汇总数据,请稍后再交!</font></p>";
}
else
{
if(aSetExcel.getIsNotLate())
{
//正常提交
theRespone=theRespone+"<p align=\"center\"><font color=\"#000000\">正常提交完毕,请还回!</font></p>";
}
else
{
//晚交
theRespone=theRespone+"<p align=\"center\"><font color=\"#FF0000\">已经晚交,系统将会做记录!</font></p>";
}
}
}
myworkbook.close();
}
//时间转换函数如将表格内的时间如13:10:00转换成整型数分钟如13×60+10+0;
public int validate(String ss)
{
int i=ss.indexOf(":");
int a=Integer.parseInt(ss.substring(0,i));
String ss2=ss.substring(i+1);
int j=ss2.indexOf(":");
int b=Integer.parseInt(ss2.substring(0,j));
int c=Integer.parseInt(ss2.substring(j+1,5));
return 60*a+b+c/60;
}
public int getRightOrWrang()
{
return RightOrWrang;
}
public String getTheRespone()
{
return theRespone;
}
public void setUrl(String s)
{
url=s;
}
public String getUrl()
{
return url;
}
public void setStartTime(String s)
{
startTime=s;
}
public String getStartTime()
{
return startTime;
}
public void setMyNum(String s)
{
myNum=s;
}
public String getMyNum()
{
return myNum;
}
public void setFileName(String s)
{
filename=s;
}
public String getFileName()
{
return filename;
}
public void setPathInfo(String s)
{
pathInfo=s;
}
public String getPathInfo()
{
return pathInfo;
}
public void setTheRespone()
{
theRespone="";
}
public void setZz()
{
zz=0;
}
public void setRightOrWrang()
{
RightOrWrang=1;
}
// public static void main(String[] args)
// {
// doExcel a=new doExcel();
// a.doPost();
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -