java上传Excel实现数据的导入
2016-12-20 10:49
573 查看
本diors开发此功能是源于公司对于客户信息的导入功能,让运营人员可以将excel中的数据通过excel上传,导入到数据库系统中。经过总结,主要思路分为如下四个步骤:
1,(html部分自行脑补)在控制器里面创建List<HashMap<String,String>>准备接收所上传的Excel中的数据。
2,创建导出需要的工具类进行对数据处理,getDataForActivityAward(InputStream inputstream, int number) ,其中number用于指定每行读取到的截止位置。
3,将inputstream存入 Workbook对象,并通过三层for循环遍历sheet、row、cell。将每个cell存入map,最终用于返回Controller。
4,将接受到的list集合遍历,并将每个map中的素有元素一次获取到复制给model的对应属性,并将model数据存入到对应的数据库中。
代码部分如下:
jQuery校验:
以上仅为本diors对这个小需求的开发总结,如有不做欢迎指正,在csdn第一遍博客,希望以后可以在这里和大家多交流,期待成长!
1,(html部分自行脑补)在控制器里面创建List<HashMap<String,String>>准备接收所上传的Excel中的数据。
2,创建导出需要的工具类进行对数据处理,getDataForActivityAward(InputStream inputstream, int number) ,其中number用于指定每行读取到的截止位置。
3,将inputstream存入 Workbook对象,并通过三层for循环遍历sheet、row、cell。将每个cell存入map,最终用于返回Controller。
4,将接受到的list集合遍历,并将每个map中的素有元素一次获取到复制给model的对应属性,并将model数据存入到对应的数据库中。
代码部分如下:
jQuery校验:
/*检验上传文件是否为空、是否为excel文件、然后异步提交form*/ if($("#userExcel").val() == ''){ alert("请先选择需要导入的Excel文件"); return; } var v = $("#userExcel").val(); if(v.lastIndexOf(".xlsx") < 0 || v.lastIndexOf(".xls") < 0){ alert("请导入Excel文件"); return; } $("#myformId").ajaxSubmit({ type:"post", url:"${base}/admin/addActivityAwardNew", success:function(data){ alert(data); window.location.href="${base}/admin/activityAwardNew"; } });Controller内对数据的接收与处理:
try { List<HashMap<String,String>> list = ExportUtil.getDataForActivityAward(userExcel.getInputStream(),5); if(list != null && list.size() > 0){ ActivityAwardRecord aar = new ActivityAwardRecord(); for(Map<String,String> map : list){ if(StringUtils.isNotBlank(map.get("0")) && StringUtils.isNotBlank(map.get("1")) && StringUtils.isNotBlank(map.get("2")) && StringUtils.isNotBlank(map.get("3")) && StringUtils.isNotBlank(map.get("4")) && StringUtils.isNotBlank(map.get("5")) ){ aar.setAwardId(awardId); aar.setMobile(map.get("1")); aar.setUserName(map.get("2")); aar.setAwardType(map.get("3")); aar.setAwardContent(map.get("4")); aar.setAwardMoney(new BigDecimal(map.get("5"))); activityAwardRecordXService.addActivityAwardRecord(aar); } } return "添加活动奖励成功"; }else{ return "Excel表数据有误或为空"; } } catch (IOException e) { e.printStackTrace(); return e.getMessage(); }util工具类对excel数据的遍历和获取:
public static List<HashMap<String,String>> getDataForActivityAward(InputStream inputstream,int number) { List<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>(); HashMap<String,String> map = new HashMap<String,String>(); if(inputstream == null ){ return list; } try { Workbook wb = WorkbookFactory.create(inputstream); int sheetNum = wb.getNumberOfSheets(); Sheet sheet = null; for(int sheetIndex = 0;sheetIndex<sheetNum;sheetIndex++){//遍历sheet(index 0开始) sheet = wb.getSheetAt(sheetIndex); Row row = null; int firstRowNum = sheet.getFirstRowNum()+1; int lastRowNum = sheet.getLastRowNum(); for (int rowIndex = firstRowNum;rowIndex<=lastRowNum;rowIndex++ ) {//遍历row(行 0开始) row = sheet.getRow(rowIndex); if(null != row){ int firstCellNum = row.getFirstCellNum(); int lastCellNum = row.getLastCellNum(); for (int cellIndex = firstCellNum; cellIndex < lastCellNum; cellIndex++) {//遍历cell(列 0开始) Cell cell = row.getCell(cellIndex, Row.RETURN_BLANK_AS_NULL); Object cellValue = null; if (null != cell) { switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: cellValue = cell.getRichStringCellValue().getString(); break; case Cell.CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { cellValue= cell.getDateCellValue(); } else { //此处对数字格式的数据转换为字符串,否则会出现科学计数法的显示。也可以使用“模板中设置单元格格式的方法避免” DecimalFormat df = new DecimalFormat("#"); cellValue=df.format(cell.getNumericCellValue()).toString(); } break; case Cell.CELL_TYPE_BOOLEAN: cellValue = cell.getBooleanCellValue(); break; case Cell.CELL_TYPE_FORMULA: cellValue = cell.getCellFormula(); break; default: System.out.println("not find match type."); } System.out.println("value:"+cellValue); map.put(cellIndex+"", cellValue +""); if(cellIndex == number){ list.add(map); map = new HashMap<String,String>(); } } else { //TODO cell is null 用 *** 代替输出 } }//end cell }else{ //TODO row is null } } //end row }//end sheet System.out.println(list.toString()); System.out.println(list.size()); } catch (Exception e) { e.printStackTrace(); } return list; }
以上仅为本diors对这个小需求的开发总结,如有不做欢迎指正,在csdn第一遍博客,希望以后可以在这里和大家多交流,期待成长!
相关文章推荐
- Excel实现上传 导入 解析Excel 页面展示Excel数据
- java easyreport 导入excel、 txt 数据简单实现(一)
- Java实现excel数据导入和导出
- java代码实现excel数据导入数据库
- 用java实现excel数据批量导入数据库
- java 实现Excel数据导入数据库
- 用Java实现从Excel数据导入到Oracle数据库表中
- 基于Spring3 MVC实现基于form表单上传Excel文件,批量导入数据时,报错:Unable to recognize OLE stream !
- Java实现Excel导入数据库,数据库中的数据导入到Excel
- Java实现Excel导入数据库,数据库中的数据导入到Excel
- C#实现使用form上传Excel文件,导入Excel数据到SQL SERVER数据库
- JAVA实现Excel表数据导入ORACLE数据库
- Java实现Excel导入数据库,数据库中的数据导入到Excel
- java实现EXCEL数据导入到数据库中的格式问题的解决
- 如何用Java实现把excel表中的数据导入到mysql数据库已有的表中
- Java—POI实现数据导入Excel提示用户是保存,打开
- Java实现Excel导入数据库,数据库中的数据导入到Excel
- 基于Spring3 MVC实现基于form表单上传Excel文件,批量导入数据!
- Java代码实现excel数据导入到Oracle