jsp 用smartupload上传Excel文件并在后台用jxl解析数据

最近开发了上传excel文件功能并解析数据,特做此记录和分享,以备不时之需,也希望对大家有用。

本例将要实现功能:

  1. 前台jsp页面上传excel文件。
  2. 用smartupload在后台接收excel文件。
  3. 用jxl.jar读取excel文件并收集数据。

一 、 前台上传文件
先上代码

first.jsp

<FORM   NAME="uploadForm" METHOD='POST' 
	action="upload.jsp" 
	ENCTYPE="multipart/form-data" 
	onSubmit="return uploadCheck(this);" 
	target="importFrame">

<tr bgcolor="#F4F4F4" align="left">
	<td>
		 请选择导入文件:&nbsp;
		 <input type=file name="filename">
		 <input type="submit" value="导入数据" name="ff" id="ff">
	</td>
</tr>
</form>

<iframe name="importFrame" width="100%" height="0" src="" FRAMEBORDER=NO ></iframe>

<script>
	function uploadCheck(f){
		var s=f.filename.value;
		if(s==""){
		  alert("请选择文件"); 
		  return false;
		}else if("xls"!=s.substr(s.length-3,3)){
			alert("请选择扩展名为xls的文件");
			return false;
		}
		f.ff.disabled = true;//点击之后,不可点
		return true;
	}
</script>

代码很简单,不过有几个小细节需要注意。

1 .jxl 貌似只能处理.xls格式的EXCEL文件,所以这里js控制了;
2. first.jsp 中上传后,页面不跳转,需要在当前页面显示出处理结果,所以 使用了 form 的target属性,本例中为 importFrame
3. 点击“导入数据”按钮后,先把按钮置为不可点,防止重复提交;


二、smartupload在后台接收excel文件

需要提前下载smartupload.jar包。

代码如下:
upload.jsp

 <%

String returnMessage = ""; //导入结果返回消息

try{
	com.jspsmart.upload.SmartUpload upload=new com.jspsmart.upload.SmartUpload();
	   upload.initialize(pageContext);
	   upload.setMaxFileSize(10000000); //限制上传文件的大小1兆
       upload.upload();//上传
	  //文件上传后的文件对象
	  com.jspsmart.upload.File myFile = upload.getFiles().getFile(0);
	  String strFileName = myFile.getFileName();
      String abspath =request.getRealPath("/")+"/myworkupload/"+strFileName;
      myFile.saveAs(abspath);
%>

这样,边接收到了前台上传的文件,保存在服务器的某个路径下。


三、JXL解析EXCEL文件

当然,使用jxl之前,还是先得下载jxl.jar包。

upload.jsp

int sheetNum=0;
File sourcefile=new File(filePath);
InputStream is = new FileInputStream(sourcefile);
jxl.Workbook rwb = Workbook.getWorkbook(is);       
Sheet rs = rwb.getSheet(sheetNum);//页

int col = rs.getColumns();//列
int row = rs.getRows();
System.out.println("(文件:"+filePath+"["+sheetNum+"页]):总共"+row+"行,"+col
列col``
);

上述代码读取excel中第一个sheet中的行数和列数,以备循环读取内容使用。

upload.jsp

List workContentList = new ArrayList();//
List detailContentList = new ArrayList();//
List belongToList = new ArrayList();//
List beginDateList = new ArrayList();//
List endDateList = new ArrayList();//
List noteList = new ArrayList();//

for(int i=0;i<row;i++){//开始读取		
	//此处1代表从第二列读取,如果需要循环列,此处要再设置一层循环,这里为了演示,暂时略掉		
    String workContent= rs.getCell(1, i).getContents();
	workContentList.add(workContent);
	//将第二列中的内容,放到list中做后续处理,后续处理程序省略了
	
			...
			...
			
	System.out.println("第"+(i+1)+"行数据="+workContent);
}

上述代码功能,参考注释。


四、返回first.jsp处理结果

最后,别忘了,我们first.jsp中还设置了一个frame等着结果呢。

upload.jsp

<script>
alert('处理成功或者失败');
window.parent.document.getElementById('ff').disabled=false;
</script>

由于前面我们设置了action在first.jsp页面的frame中展示结果,所以这里就是需要返回的处理结果,通过alert提示。

根据实际的处理结果,通过alert弹出到first.jsp页面中。

弹出之后,这里把 不可点 的按钮 “导入数据” 再设置成可点。


不会录视频,截几个图

文件后缀不符合要求时
这里写图片描述

上传成功时,上传按钮不可点:
这里写图片描述

点击确定后,按钮恢复:
这里写图片描述

好了,就先分享到这。有不正之处,欢迎留言讨论。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷风在北京

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值