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里

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

 
时间: 2024-08-28 05:17:59

Excel文档上传的相关文章

js仿百度文库文档上传页面的分类选择器_第二版

仿百度文库文档上传页面的多级联动分类选择器第二版,支持在一个页面同时使用多个分类选择器: 此版本把HTML,CSS,以及图片都封装到"category.js"中,解决因文件路径找不到样式及图片的问题: 源码下载地址:http://download.csdn.net/detail/testcs_dn/7290577 初始状态,一个页面使用两个,可以初始化之前选中的分类: 选择状态: 当选中一个分类后,会触发"onChange"事件,如上图中的"您选择的分类编

如何解决用jquery.uploadify.js进行多文档上传会修改document的title

在dwz框架中使用了jquery.uploadify.js进行多文档上传当打开窗口后会发现document的title被无意之中修改.进行代码调试也没有发现.对swfobject进行研究也没有发现修改title的情况. 只能采用一种方式禁止修改title var oldTitle = document.title; try { document.attachEvent('onpropertychange', function(){ if (document.title != oldTitle )

Java文档上传问题设计

近期公司让做一个文档上传的功能,功能描写叙述大概是这样子滴 书籍名称.书籍定价.书籍封面图片(须要上传).文档内容 (须要上传) .还有其它相关的描写叙述信息. 我的设计  表 A  包括以上字段 ,最初设计  文档上传.和内容保存在同一个页面. 这样后期遇到了一个问题可能用户仅仅是想 改动一下文档描写叙述的相关信息.可是改动的时候不得不 将整个Form表单编辑过后提交,并且那个上传的 俩文档是不会.在改动里面显示出来的 . 这种设计非常糟糕,后来 将这个东西分为两部分.一部分是文档相关定义的提

struts2文档上传报错

今天在写文档上传的时候出现了INFO: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.contex提示错误,后来查找了写资料发现是struts.xml中少了配置 修改办法为在struts2.xml中加入<constant name="struts.multipart.saveDir" value="/tmp"></con

多文档上传(upload multiple documents)功能不能使用怎么办?

问题描述: 在SharePoint 2010的文档库里选择documents标签,然后选择upload document下拉菜单,你会发现upload multiple documents那个按钮是灰色的,不能使用. 当你把鼠标放到那个按钮上悬停,会出现一条提示信息说: This control is currently disabled. You might not have the right permission level to use this, you might need to s

SharePoint 2013 文档上传的多种形式

SharePoint 2013 中的某些功能需要使用 ActiveX 控件.这会在不支持 ActiveX 的浏览器上产生限制.目前只有 32 位版本的 Internet Explorer 支持此功能.也就是说对于文档库资源管理器打开需要使用32位ie打开,如果你是64位机器,有可能安装有两个ie版本,分别是32位和64位.请使用32位版本打开.还要注意部分SharePoint功能只支持IE.具体请参考官方文档说明,请参考. https://technet.microsoft.com/zh-CN/

多文档上传文件

HttpFileCollection Files = HttpContext.Current.Request.Files;            for (int i = 0; i < Files.Count; i++)            {                HttpPostedFile PostedFile = Files[i];                if (PostedFile.ContentLength > 0)                {       

xls文档上传解析

private File xls;    public void setXls(File xls) {        this.xls = xls;    }    @Action("AreaAction_upload")    public String upload() throws Exception {                List<Area> list=new ArrayList<>();        //创建解析xls工具类      

PHP读取excel文档

PHP读取excel文档 项目需要读取Excel的内容,从百度搜索了下,主要有两个选择,第一个是PHPExcelReader,另外一个是PHPExcel. PHPExcelReader比较轻量级,仅支持Excel的读取,实际上就是一个Reader.但是可惜的是不能够支持Excel 2007的格式(.xlsx). PHPExcel比较强大,能够将内存中的数据输出成Excel文件,同时还能够对Excel做各种操作,下面主要介绍下如何使用PHPExcel进行Excel 2007格式(.xlsx)文件的