jxl+struts1向后台导入excel表格中的数据

来源:互联网 发布:mac双系统开机怎么切换 编辑:程序博客网 时间:2024/05/20 02:27
思路:利用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;}}