页面读取EXCEL表并将数据导入到Oracle(DWR异步机制,iframe页面嵌套)

本文介绍了一个使用JavaScript和POI实现的简易项目,用于将Excel数据导入数据库。项目包括Struts配置、页面设计、文件上传处理及后台数据保存逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在在做的一个小型项目,目的为了实现js导入并上传excel到数据库的过程(功能简易,并没有考虑复杂的校验,用的POI实现)

struts配置文件(使用页面嵌套的方式):

<action path="/query*" type="*.ActionZcgl" name="Form*" parameter="query*" scope="request">
	<forward name="info" path="/zcgl/*Info.jsp" />--功能按钮区域jsp
	<forward name="list" path="/zcgl/*List.jsp" />--查询结果显示区域jsp
</action>		
<action path="/save*" type="*.ActionZcgl" name="Form*" parameter="save*" scope="request">
	<forward name="success" path="/zcgl/*Info.jsp" />
</action>

*Info.jsp:页面采用DWR的异步机制避免文件上传时用户的误操作
--引入DWR
<script type='text/javascript' src='<%=path%>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=path%>/dwr/util.js'></script>
<form action="save*.do" target="listPage" method="post" id="fileDocUploadForm" enctype="multipart/form-data">		
<td colspan="2" height="40" id="btnsc">			
    <input type="button" name="queryBut" value="查 询" class="blueTr9"  onclick="select_curve('<%=path %>','query*.do')"> 		  
    <input class="blueTr9"  id="btnSubmit" type="button" height="35" value=" 上 传 "  onclick="fildDocUpload(1,this);" />
    <input class="blueTr9"  id="btnCancle" type="button" height="35" value=" 取 消 "  onclick="fildDocUpload(3);" /><span id="submitMsg" style="color: red;"></span>
</td>
<div align="center">  --页面嵌套--
    <iframe id="listPageId" name="listPage" src="<%=path%>/query*.do?listPage=1" frameborder="0" scrolling="anto" width="100%" 
onload="height = document.frames(this.name).document.body.scrollHeight" ></iframe>
</div>

方法区:
//文件转移或复制页面和上传页面控制方法
function fildDocUpload(flag,butObj){
	var form = jQuery("#fileDocUploadForm"), selectFile = form.find(":file");	
	if(flag==1){		
		var upload_path = jQuery("input[name='file']").val();
		var upload = upload_path.lastIndexOf(".");
		var upload_type = upload_path.substring(upload, upload_path.length).toUpperCase();				
		var isOK = true;		
		if(upload_type =="" ){//判断文件是否存在
			isOK=false;
			alert("请选择正确文件路径!")
			return false;
		}else if(upload_type != ".XLS"){//判断格式		
			alert("请选择.xls文件")
			return false;		
		} else {			
			DWREngine.setAsync(false);		
			form.submit();				
			DWREngine.setAsync(true);
		}				
	} else if(flag==3) {
		returnValue="false";
		window.close();
	}else{
		var form = jQuery("#fileDocUploadForm");
		form.submit();
	}
}
//获取日期
function getRadioObjValue(obj_name){
	var str = "";
	jQuery("#tabhead1").find("input[type=radio][name='"+obj_name+"']").each(function(){
		if(jQuery(this).attr("checked")){
			str = jQuery(this).val();
		}
	});
	return str;
}
function select_curve(path,action_value){
	//新增查询
	var form1 = document.frames("listPage").document.forms[0];
	var form0 = document.forms[0];	
	form1.d_date.value = getRadioObjValue("d_date");   	
	form1.target="listPage";
	form1.action=path + "/"+action_value+"?listPage=1";	
	form1.submit();		
}
*LIst.jsp:
<form id="form1" action="<%=path%>/*.do?listPage=1" target="listPage" method="post">   
    <input type="hidden" name="d_date" value="${frm.d_date}" />  
    <input type="hidden" name="pageNo" value="${frm.pageNo}" />
    <input type="hidden" name="rowsPerPage" value="${frm.rowsPerPage}" />

Action部分:
查询及初始化			
//获取数据日期
				List listdataDate = new CommonMethod().queryDateDataList();
				request.setAttribute("listdataDate", listdataDate);	//注释掉页面会没有日期							
								
				FormZcglcurve frm = (FormZcglcurve) form;
		        FormUserOperation userOp = Constant.getFormUserOperation(request);
				
				if (frm.getRowsPerPage() == 0) {
						frm.setRowsPerPage(20);
						
				}
				
				// 判断是到列表页面还是查询页面
				if (request.getParameter("listPage") != null
						&& request.getParameter("listPage").equals("1")) {
					
					if(frm.getD_date() == null || "".equals(frm.getD_date() )){
						if(listdataDate != null && listdataDate.size() > 0){
							Map map =(Map) listdataDate.get(0);
							String d_date = (String) map.get("D_DATE");
							frm.setD_date(d_date);
						}else{
							String last_month_date=CommonMethod.priorMonthEnd();
							frm.setD_date(last_month_date);
						}
						
					}
					// 执行查询列表
					List<FormZcglcurve> resultList = getBO().queryYieldCurve(frm);
					
					request.setAttribute("resultList", resultList);
					request.setAttribute("frm", frm);
					
					return mapping.findForward("list");
				}else{
					request.setAttribute("frm", frm);
					return mapping.findForward("info");
				}
上传方法
		FormZcglcurve frm = (FormZcglcurve)form;
		Workbook workbook = Workbook.getWorkbook(frm.getFile().getInputStream(), new WorkbookSettings());
		String d_date = frm.getD_date();
		// 判断数据导入是否成功.0:成功,1:无数据,2:插入数据库失败
		int impFlag = 0;
		String msg = null;
		try{
			// 导入数据
			impFlag = getBO().saveCurveDataByExcel(workbook,form);
			
		}catch (Exception e) {
			impFlag = 2;
			
			e.printStackTrace();
		}
		workbook.close();
		switch(impFlag) {
			case 0 : 
				msg = "导入完毕,数据成功导入!";
				break;
			case 1 : 
				msg = "当前excel数据文件中没有可以导入的数据,请先填充文件。";
				break;
			case 2 : 
				msg = "当前估值数据导入失败,请检查数据是否正确或者已经存在。";
				break;
		}
		showMessage(response, msg);	
		return null;	


DAO层:
public int save*(Workbook workbook,ActionForm form)  //传值的时候要将excel和页面所选的日期都要传过来

上传保存
		Sheet  ETSheet= workbook.getSheet(0);
		//getCell(列,行)
		int rows=ETSheet.getRows();
		System.out.println(rows);
		int columns=ETSheet.getColumns();
		System.out.println(columns);
		
		FormZcglcurve frm=(FormZcglcurve) form;
		String d_date=frm.getD_date();  //将操作日期更改无论之前日期数据是否存在				
		// 判断数据导入是否成功.0:成功,1:无数据,2:插入数据库失败
		int flag = 0;
		
		if(rows < 2) {
			// 当前xls表中没有数据
			System.out.println("当前xls表中没有数据");
			flag = 1;
			return flag;
			}
		
		// 需执行的sql列表
		String sql =  "";		
		// 获取数据,并拼接成sql语句
		for(int i=1; i<rows; i++) {		//默认格式含有表头 ,操作时将表头行舍弃
			if("".equals(ETSheet.getCell(0,i).getContents().trim())){
				break;
			}
			//取excel表的
			String curve_name = ETSheet.getCell(0,i).getContents();
			String s_year_limit = ETSheet.getCell(1,i).getContents();
			String average_value = ETSheet.getCell(2, i).getContents();												
			// 导入sql
			jdbcTemplate.update("insert INTO *** (curve_name,s_year_limit,average_value,d_date) "
						+ " values (?,?,?,to_date ('"+d_date+"','yyyy-MM-dd'))", 
						new Object[] {ETSheet.getCell(0, i).getContents(),ETSheet.getCell(1, i).getContents(),
						ETSheet.getCell(2, i).getContents()});				
		}			
		return flag;
查询
		StringBuffer sql = new StringBuffer();
		String d_date=form.getD_date();	
		sql.append(" select * from *** t where d_date = to_date ('"+d_date+"','yyyy-MM-dd')");		
		//为对象分页赋总值
		int rowsCount = jdbcTemplate.queryForInt("select count(1) from ("+sql.toString()+") ");
		form.setRowsCount(rowsCount);
		return (List<FormZcglcurve>) jdbcTemplate.queryForListPage(sql.toString(), form.getStartPosition(),
						form.getRowsPerPage(), FormZcglcurve.class);
封装excel读取的类
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值