思路:利用jxl将excel文件中的数据循环遍历出来,在循环每一行的时候判断录入的信息是否符合要求,如果符合要求封装成一个对象插入到数据库中,并返回给用户一条插 入成功的信息,如果该行其中的一条数据不符合要求,则将对象设置为空不能插入,并返回给用户错误的行数和错误的信息
public class ExportExcel {
private Workbook workbook;
private Sheet sheet;
private String message = "";// 导入提示信息
private int rightCount = 0;// 正确导入数
private int errCount = 0;// 错误导入数
private int isoverride;// 是否覆盖相同信息(0 不覆盖,1 覆盖)
/**
* 创建ExportExcel对象,对HSSFWorkbook进行初始化
*
* @param InputStream
* excel文件的输入流对象
* @param int 是否覆盖相同信息(0 否,1 是)
* */
public ExportExcel(InputStream is, int isoverride) throws Exception {
// 构造函数对workbook进行初始化
try {
workbook = Workbook.getWorkbook(is);
sheet = workbook.getSheet(0);
this.isoverride = isoverride;
} catch (IOException e) {
message += "读取文件失败!<br>";
throw new Exception();
}
}
/**
* 所有导入信息
*
* @return Map(message 行导入错误信息,rightCount 正确导入行数,errCount 错误导入行数)
* */
public Map<String, String> getResult() throws Exception {
Map<String, String> result = new HashMap<String, String>();
String message = getMessage();
String rightMessage = "";
rightMessage += "正确导入数为:" + rightCount + "<br>";
String errMessage = "";
errMessage += "错误导入数为:" + errCount + "<br>";
result.put("message", message);
result.put("rightMessage", rightMessage);
result.put("errMessage", errMessage);
return result;
}
/**
* 导入信息
*
* @return String 每一行的错误信息
* */
private String getMessage() throws Exception {
int rows = sheet.getRows();// 行数
for(int i=2;i<rows;i++){
Cell[] cell = sheet.getRow(i);
VillageInfo obj = packageingToObj(cell, i);
if(obj!=null){
try {
vDAO.saveVillageInfo(obj);
rightCount++;
message += "第" + (i+1) + "行" + "导入成功!<br> ";
continue;
} catch (Exception e) {
errCount++;
message += "信息导入失败!<br>";
continue;
}
}
}
return message;
}
/**
* 将每一行记录封装为对象
*
* @param HSSFRow
* 所有行
* @param int 行下标
* @return 每一行记录的对象形式
* */
private Object packageingToObj(Cell[] cell,int i)
throws Exception {
//时间
String joinTime = cell[8].getContents().toString();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
try {
Date joinTime1 = df.parse(joinTime);
} catch (Exception e) {
message += "第" + (i+1) +"行" + "时间格式不正确!<br> ";
errCount++;
return null;
}
return vInfo;
}
/**
* 验证是否包含特殊字符 1 包含,0 不包含
*
* @param String
* 验证字符串
* @return int (1 包含,0 不包含)
* */
private int containSpecialCharacters(String input) throws Exception {
Pattern p = Pattern
.compile("[`~!@#$^&*=|{}':;',\\[\\].<>《》/?~%!@#¥……&*——|{}【】‘;:”“'。,、?]");
if (p.matcher(input).find()) {
return 1;
}
return 0;
}
/**
* 字符长度
*
* @param String
* @return int 长度
* */
private int getInputSize(String input) throws Exception {
return input.length();
}
/**
*
* @describe 验证日期
* @return int
* @param
*/
private int checkDate(String date) {
Pattern p1 = Pattern
.compile("^((?:19|20)\\d\\d)(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])(0\\d|1\\d|2[0-3])(0\\d|[1-5]\\d)(0\\d|[1-5]\\d)$");
if (p1.matcher(date).matches()) {
return 1;
}
return 0;
}
}