两个月没写东西了,今天拉出来操练操练。写一个Excel文档数据上传保存数据库。
一:准备工作
1、jar包:当时使用的Maven,自己就加入jar包了
<!-- jxl.jar操作Excel表格 -->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.10</version>
</dependency>
2、现在就可以开始写了
@RequestMapping(value = "/importfile")
public @ResponseBody Map importFile(HttpServletRequest request,HttpServletResponse response) throws Exception
返回map数据
String interfaceCode = "";
resultMap = new HashMap<String, Object>();
User user = null;
String userName = null; //用户名
String realName = null; //真实姓名
String cellphone = null; //手机号
String deptName = null; //部门名称
String remark = null; //备注
int count = 0; //当前数据库正式员工数量
int total = 0; //总数:当前员工数量加上导入数量
Workbook book = null;
File localFile = null;
定义变量
//授权正式员工数量
int presetNumber = Integer.parseInt(SysConfigUtil.getParamValue("accredit.official.employees"));
从配置文件中获取授权信息。
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
if(multipartResolver.isMultipart(request)){
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
Iterator<String> iter = multiRequest.getFileNames();
while(iter.hasNext()){
MultipartFile file = multiRequest.getFile((String)iter.next());
if(file == null){
continue;
}
SpringMVC自带的上传文件方法。
String fileName = file.getOriginalFilename();
String path = request.getServletContext().getRealPath("file/temp");
localFile = new File(path+"/"+fileName);
file.transferTo(localFile);
book = Workbook.getWorkbook(localFile);//获取文件
这边是获取文件
Sheet sheet = book.getSheet(0); //获得工作表对象
int rows = sheet.getRows(); //行
List<User> successList = new ArrayList<User>(rows);
count = userService.countFindByuserType(2);//获取正式员工数量
total = rows+count;
创建工作表
if(total<presetNumber){
//标题
String userNameTitle = sheet.getCell(0,0).getContents().trim();
String realNameTitle = sheet.getCell(1,0).getContents().trim();
String cellphoneTitle = sheet.getCell(2,0).getContents().trim();
String deptNameTitle = sheet.getCell(3,0).getContents().trim();
String defaultPassword = SysConfigUtil.getParamValue("system.default.password");
for(int i = 0; i < rows; i++){
userName= sheet.getCell(0,i).getContents().trim(); //用户名
realName = sheet.getCell(1,i).getContents().trim();//真实姓名
cellphone= sheet.getCell(2,i).getContents().trim();//手机号
deptName = sheet.getCell(3,i).getContents().trim();//部门名称
remark = sheet.getCell(4,i).getContents().trim(); //备注
//校验参数
if(StringUtils.isBlank(userName)){ //用户名
resultMap.put("result", "FAIL");
resultMap.put("result", "第 "+ i +"行的 " + userNameTitle + " 不能为空!");
return resultMap;
}
if(StringUtils.isBlank(realName)){ //姓名
resultMap.put("result", "FAIL");
resultMap.put("result", "第 "+ i +"行的 " + realNameTitle + " 不能为空!");
return resultMap;
}
if(StringUtils.isBlank(cellphone)){ //手机号
resultMap.put("result", "FAIL");
resultMap.put("result", "第 "+ i +"行的 " + cellphoneTitle + " 不能为空!");
return resultMap;
}
if(StringUtils.isBlank(deptName)){ //部门
resultMap.put("result", "FAIL");
resultMap.put("result", "第 "+ i +"行的 " + deptNameTitle + " 不能为空!");
return resultMap;
}
//将 数据 封装到集合中
user = new User();
user.setUserName(userName);
user.setRealName(realName);
user.setPassword(defaultPassword);
user.setDeptName(deptName);
user.setRemark(remark);
user.setUserType(2);
successList.add(user);
if(userService.isUserNameExist(user.getUserName())){
resultMap.put("result", "FAIL");
resultMap.put("result", user.getUserName() + MessageUtil.getMessage("user.userName.exist"));//用户名已存在
return resultMap;
}
}
// 循环保存数据
int maxSize = successList.size();
for(int i = (maxSize - 1) ; i > 0 ; i --){
user = successList.get(i);
userService.insert(user);
roleService.authorize(user.getId(), user.getUserType());
}
resultMap.put("result", "OK");
resultMap.put("message", "");
localFile.delete();
删除临时文件,这个最好放在finally里
循环遍历保存数据,刚开始做得时候是正确的信息保存,错误信息返回给用户,后来发现数据量大,就改为出现出错就返回给用户,改好之后再上传