当前位置: 首页 > news >正文

Excel文档上传

两个月没写东西了,今天拉出来操练操练。写一个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里

循环遍历保存数据,刚开始做得时候是正确的信息保存,错误信息返回给用户,后来发现数据量大,就改为出现出错就返回给用户,改好之后再上传

 

转载于:https://www.cnblogs.com/kangyanxiang/p/4757364.html

相关文章:

  • kvm 安装 centos7 文本模式 分辨率 太高修改
  • Android中Activity和Fragment与Fragment和Fragment之前互相传值方法
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 软件工程相关问题
  • 数据结构Java实现04----循环链表、仿真链表
  • 将视频导入到iOS Simulator中
  • SPFA/Dijkstra POJ 3159 Candies
  • 异步函数
  • Android框架之Volley
  • OC变量数据类型
  • win7 蛋疼的时间格式转化
  • MacBook: 安装Mac OS X与多分区Windows双系统完美教程
  • ecshop如何判断缓存文件是否能更新
  • 登录信息提示
  • 某银行网银代发工资无法操作问题解决
  • 【知识碎片】第三方登录弹窗效果
  • 3.7、@ResponseBody 和 @RestController
  • Android组件 - 收藏集 - 掘金
  • Cookie 在前端中的实践
  • go语言学习初探(一)
  • input实现文字超出省略号功能
  • js如何打印object对象
  • Linux快速复制或删除大量小文件
  • Linux中的硬链接与软链接
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Netty源码解析1-Buffer
  • Selenium实战教程系列(二)---元素定位
  • Vim 折腾记
  • Vue2.0 实现互斥
  • 关于for循环的简单归纳
  • 力扣(LeetCode)965
  • 批量截取pdf文件
  • 前端临床手札——文件上传
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Android开发者必备:推荐一款助力开发的开源APP
  • 正则表达式-基础知识Review
  • ​比特币大跌的 2 个原因
  • #pragma 指令
  • (6)添加vue-cookie
  • (ZT)出版业改革:该死的死,该生的生
  • (八)Spring源码解析:Spring MVC
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转载)(官方)UE4--图像编程----着色器开发
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net core控制台应用程序初识
  • .net mvc部分视图
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .Net 路由处理厉害了
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值