<html> <head> <title>导入观众数据</title> <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'> <script language="Javascript"> function importDate() { var filename = $("#attachfile").val(); if(!(filename.indexOf(".xls") > -1 || filename.indexOf(".xlsx") > -1)) { alert("请选择正确的Excel格式文件"); }else { $("#uploadForm").submit(); } } function callback(msg) { document.getElementById("msg").innerHTML = "进度:" + msg; } </script> </head> <body> <form name="uploadForm" id="uploadForm" method="POST" action="<%=path %>/servlet/VisitorServlet?op=importExcel" enctype="multipart/form-data" target="hidden_frame"> <table border="0" cellspacing="0" cellpadding="0" class="edit-table"> <thead> <tr> <th colspan="2"><img src="../../Images/photo_album.png" >导入数据</th> </tr> </thead> <tbody> <tr> <th width="20%"><span></span>数据文件:</th> <td width="30%"><input type="file" name="attachfile" id="attachfile" size="30"/></td> </tr> <tr> <td colspan="2"> <span id="msg">进度:</span> </td> </tr> </tbody> </table> <iframe name="hidden_frame" id="hidden_frame" style="display:none"></iframe> </form> <input type="button" class="shop-btn1" value="导入" onclick="javascript:importDate();"/> <input type="button" class="shop-btn1" value="关闭窗口" onClick='javascript:window.open("","_self");window.close();'/> </body> </html>
说明:建一个隐藏的iframe,在form的target=“隐藏iframe的id”
servlet逻辑:
ServletInputStream is = request.getInputStream(); /*过滤HTTPHeader,否则jxl会报无法识别文件结尾的错误*/ byte[] junk = new byte[1024]; for(int i = 0; i < 4; i++) { is.readLine(junk, 0,junk.length); } int result = vm.importExcelDateNew(is, out); if(result != -1 && result == -2) { out.println("<script language='Javascript'> "); out.println(" alert('导入观众数据成功!');"); out.println(" top.callback('导入成功');"); out.println(" top.window.close();"); out.println(" window.close();"); out.println("</script>"); }else { out.println("<script language='Javascript'> "); out.println(" alert('导入第"+ result +"条数据时出现异常!');"); out.println(" top.callback('导入失败');"); out.println("</script>"); }
public int importExcelDateNew(InputStream in, PrintWriter out) throws IOException { Workbook book; // 声明一个空的工作对象 int result = 0; VisitorDB vb = new VisitorDB(); try { book = Workbook.getWorkbook(in); // 使工作薄对象得到一个execl Sheet se = book.getSheet(0); // 得到Excel第一个sheet System.out.println("*********开始从导入观众数据*********"); result = vb.importExcelDate(se, out); System.out.println("*********导入观众数据结束***********"); } catch (Exception e) { e.printStackTrace(); return -1; } return result; }
导入过程回调jsp页面的方法即可查看当前进度