在javaweb中将excel表格导入存放数据库

news/2024/7/4 9:36:01

在jsp页面

<html>
<body>
<head>
<script type="text/javascript">
function fileChange(input){
	var fileName = input.value;
		if(fileName.length > 1 && fileName ) {       
        var ldot = fileName.lastIndexOf(".");
        var type = fileName.substring(ldot + 1);
        if(type=="xls" || type=="xlsx") {
        	$("#type").val(type);
            var form=document.getElementById("form_query");
			form.method = 'post';
			form.action = 'config/department/importExcle';
			form.submit();  
        }else{
        	alert("文件格式不准确!");
        	input.outerHTML=input.outerHTML.replace(/(value=\").+\"/i,"$1\"")
        }       
	}	
};

</script>
</head>
<table>
	<tr>
		<td>
			<input type="file" id="excleFile" name="excleFile"onchange="fileChange(this);" style="display:none"/>
			<button onclick="$('input[id=excleFile]').click();" class="save-btn">导入</button>
		</td>
		<td>
			<button onclick="exportDepart()" class="save-btn">导出</button>
		</td>
	</tr>
</table>
</body>
</html>

本人用的struts2 的框架,在jsp页面写好以后,数据会通过struts.xml 找到action中对应的方法,在action方法中的具体代码如下:

//导入科室信息 
	public String readXls() throws IOException{
		try {
			Workbook workBook=null;
			InputStream is = new FileInputStream(excleFile);
			String type = request.getParameter("type");
			if(type.toLowerCase().endsWith("xls")){  
				workBook=new HSSFWorkbook(is);  
	        }  
	        if(type.toLowerCase().endsWith("xlsx")){  
	        	workBook= new XSSFWorkbook(is);  
	        }  
	        //调用service层方法,把数据传到service层处理。
			departmentsService.readXls(workBook);
			return SUCCESS;
		} catch (FileNotFoundException e) {
			log.error(e);
			return ERROR;
		}
	}
	

接在在service实现层进行处理,具体代码如下:

@Override
public List<DepartmentVO> readXls(Workbook workBook) {
	try {
			DepartmentVO departVO=null;
			for(int numSheet=0;numSheet<=workBook.getNumberOfSheets();numSheet++){
				Sheet sheet=workBook.getSheetAt(numSheet);
				if(sheet==null){
					continue;
				}
				//处理excel表格中的数据,其实很简单对应好就可以了。
				for(int rowNum=1;rowNum<=sheet.getLastRowNum();rowNum++){
					Row row=sheet.getRow(rowNum);
					if(row!=null){
						departVO=new DepartmentVO();
						Cell dId=row.getCell(1);
						Cell dName=row.getCell(2);
						//Cell pId=row.getCell(2);
						//Cell dStatus=row.getCell(3);
						Cell dInfo=row.getCell(4);
						Cell dAddr=row.getCell(5);
						Cell dPhone=row.getCell(6);
						Cell dNo=row.getCell(0);
						
						departVO.setDepartmentName(ExcleUtils.getValue(dName));
						departVO.setDepartmentId(ExcleUtils.getValue(dId));
						departVO.setDisplay_no(ExcleUtils.getValue(dNo));
						departVO.setParentId("0");
						departVO.setPhone(ExcleUtils.getValue(dPhone));
						departVO.setDepartmentAddr(ExcleUtils.getValue(dAddr));
						departVO.setIntroduction(ExcleUtils.getValue(dInfo));
						departVO.setDepartment_status(1);
						saveOrUpdaeDepartment(departVO);
					}
				}
			}
	} catch (Exception e) {
		log.error(e);
	}
	return null;
}

@Override
public ServiceResult saveOrUpdaeDepartment(DepartmentVO d) {
	try{
		departmentDAO.saveOrUpdaeDepartment(d);
		return ServiceResult.getSucInstance();
	}catch(DataAccessException dacEx){
		ServiceResult sr = ServiceResult.getFailedInstance(""
				, "系统异常,更新科室失败!");
		return sr;
	}catch(Exception ex){
		log.error(null, ex);
		ServiceResult sr = ServiceResult.getFailedInstance(""
				, "参数错误,更新科室失败!");
		return sr;
	}
}

剩下的就不写了,剩下就是封装好的数据传到bean中存到数据库的操作。我代码的例子可能不是很好,是将科室信息导入数据库的。所以各位看官轻喷嘿嘿


欢迎大家关注个人公众号
分享各种学习资料,包含java,linux,大数据等。资料包含视频文档以及源码,仅供学习交流和分享,不涉及任何商业用途。同时分享本人及投递的优质技术博文。
程序员小猪


http://www.niftyadmin.cn/n/647546.html

相关文章

Android获取View对应的Bitmap

我的应用里面有一个需求&#xff0c;将一个画面分享出去&#xff0c;这个画面底层是一个View&#xff0c;所以首先要把这个View转换成Bitmap&#xff0c;然后在分享这个bitmap即可。话不多说&#xff0c;直接上代码。 有个地方需要注意一下&#xff1a;就是//Draw background的…

Java进阶之设计模式

什么是设计模式 答&#xff1a;简单的说&#xff0c;设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计的 经验的总结。使用设计模式是为了可重用代码&#xff0c;让代码更容易被他人理解&#xff0c;保证代码可靠性。 通常来说设计模式分为三大类&#xff1a; …

用Python实现不同数据源的对象匹配【思考】

关于之前的利用python实现不同数据源的数据匹配的实验的一些思考&#xff1a; 在开始匹配之前一定要对于两个数据源中的记录进行分析&#xff0c;结合实际的应用场景判断合适的匹配字段&#xff1b;开始匹配之前可以进行一些简单的判断&#xff0c;看看所得到的数据的纯净度如何…

float double BigDecimal 详解

首先给看一个代码段 package com.main;public class Test1 {public static void main(String[] args){double b10.060.01;float b2(float) (0.060.01);System.out.println(0.060.01);System.out.println(1.0-0.42);System.out.println(4.015*100);System.out.println(303.1/10…

Java三大特性详解--封装

本人也是刚刚入职java开发的小白&#xff0c;在实际工作中和在学校用到的东西还是有很多不一样的&#xff0c;虽然我是科班出身&#xff0c;但是还是深感自己基础不牢啊&#xff0c;可谓基础不牢&#xff0c;地动山摇&#xff0c;在工作中往往一个简单的bug找到吐血&#xff0c…

利用阿里大于(大鱼)平台进行发送手机验证码

昨天看了一篇博文利用阿里云大于平台给手机发送验证码和短信&#xff0c;当时自己就很感兴趣&#xff0c;因为这个技术很有用&#xff0c;相当于以后做用户注册的功能可以进行短信验证&#xff0c;并且大于平台的短信收费也很低&#xff0c;我自己都没有花钱。现在来分享一下我…

Description Resource Path Location Type Project configuration is not up-to-d

右键项目&#xff0c;【Maven】—》【Update Project Configuration…】 搞定 欢迎大家关注个人公众号 分享各种学习资料&#xff0c;包含java&#xff0c;linux&#xff0c;大数据等。资料包含视频文档以及源码&#xff0c;仅供学习交流和分享&#xff0c;不涉及任何商业用途。…

java生成一维码和二维码

这两天想了解一下二维码是怎样生成的。然后在网上看了很多资料&#xff0c;也有很多源码可以直接用的。我也没有自己写&#xff0c;也是拿着源码进行看和修改的&#xff0c;然后生成自己想要的二维码和一维码&#xff0c;还是很不错的&#xff0c;所以分享一下。 首先第一步&a…