java web Excel导入、导出的实现 | 您所在的位置:网站首页 › 网页数据怎么导入excel › java web Excel导入、导出的实现 |
在做web开发时,我们经常会用到数据表格的导入导出功能,这样可以帮我们节省人工操作的时间,极大提高办事效率,下面,直入正题: 笔者所做的导入导出是针对java springMVC框架、工作簿poi以及前端plupload.js插件设计的。 第一步、总体介绍首先,来看页面展示,如下图: 首先,来看看前台导入、导出的jsp代码: ID: 姓名: 搜索 导入 导出然后,再来看看js: $(function() { var uploadsubmenu = ''+ '模板下载'+ ''+ '导入数据'+ ''; if($("#upload_sub").length //文件名+后缀名 var fileName = resouseCode + '.' + suffix var templatediv = ''+ ''; if (window.top.$('#templatediv').length == 0) { window.top.$("body").append(templatediv); } var templistspan = ""; templistspan +='' templistspan += ''+fileName+'' templistspan +=''; window.top.$("#templatediv").html(templistspan); //弹出下载模板 window.top.$("#templatediv").dialog({ title:"下载模板", modal:true }); //下载模板完了就关闭对话框 window.top.$("#downloadBtn").click(function() { window.top.$("#templatediv").dialog('close'); }); } /** * 上传导入 */ function makerUpload(importurl, callback, resouseCode) { console.log('弹出导入对话框。。'); //用户详情对话框 var importWindow = window.top.$('#importWin'); if(importWindow.length再来看看其对应的import.js: /*$(function() { console.log('windows是否一致', window === window.top); $('#startImport').click(function() { console.log('开始导入'); var iframe = $('#mainPanel > iframe' ,window.top.document)[0]; var currentChildWindow = iframe.contentWindow || iframe.window; console.log('callback', callback); currentChildWindow[callback]('qiyongkang'); }); });*/ $(function() { var files = []; var errors = []; var type = 'file'; var chunk = true; var startbutton = null; var des = ""; des += "单个文件最大不超过1mb; ;;"; des += "批量上传文件个数不超过1个; ;;"; des += "上传文件格式为:xls"; des += ""; $("#uploader").pluploadQueue($.extend({ runtimes : 'flash,html4,html5', url : 'file/fileHandle/upload.do?resouseCode=' + resouseCode, max_file_size : '1mb', file_data_name:'file', filters : [], dragdrop : false, flash_swf_url : 'js/plugs/plupload/plupload.flash.swf', init:{ Init:function(uploader){ //开始上传按钮 startbutton = $(".plupload_start"); $(".plupload_header").html(des); }, QueueChanged:function(uploader){ if(uploader.files.length > 1){ var error = ""; error += "最多只能上传1个"; error += ""; $(".plupload_header").html(error); startbutton.hide(); }else{ $(".plupload_header").html(des); startbutton.show(); } }, FileUploaded:function(uploader,file,response){ if(response.response){ var rs = $.parseJSON(response.response); console.log(rs); if(rs.status){ files.push(file.name); }else{ errors.push(file.name); } } }, UploadProgress:function(uploader,fs){ var begin = ""; begin +="开始上传文件![]() ![]() 其中的chunk的含义,笔者稍作解释,如果文件的大小超过chunk_size,那么此文件将分多次请求上传,待会儿就可以看到后台处理上传的请求逻辑。 第三步、导出当前页和导出全部对应的jsp代码已在第二步给出,再来看导出对应的js: /** * 初始化导出按钮 */ function initMyExportMenu(){ var exportsubmenu = ''+ '导出当前页'+ ''+ '导出全部'+ ''; $("body").append(exportsubmenu); var exports = $("a[type='export']"); $.each(exports,function(data){ var exportMenu = $(this).menubutton({ menu: "#exportMenu_sub", iconCls:"icon-export" }); $(exportMenu.menubutton('options').menu).menu({ onHide:function(){ }, onClick: function (item) { if(item.id=="export_crrent"){ console.log('导出当前页'); var options = $('#userListTab').datagrid('getPager').data("pagination").options; var curr = options.pageNumber; console.log('当前页:', curr); var pageSize = options.pageSize; console.log('页大小', pageSize); //通过隐藏域传参数 $('#current').val(curr); $('#size').val(pageSize); $("#queryForm").form('submit',{ url : 'sys/user/exportData.do', onSubmit : function() { return $(this).form('validate'); }, success : function(data) { } }); } if(item.id=="export_all"){ //通过隐藏域传参数 $('#current').val(0); $('#size').val(0); console.log('导出全部'); $("#queryForm").form('submit',{ url : 'sys/user/exportData.do', onSubmit : function() { return $(this).form('validate'); }, success : function(data) { console.log('data', data); } }); } } }); }); } /** * 回调函数 * @returns */ function myCallback(name) { console.log('回调函数执行。。' + name); //重新加载datagrid $("#userListTab").datagrid('reload'); }上面的回调函数是用于导入成功后重新加载datagrid。 第四步、导入导出的后台处理逻辑首先,来看看UserController.java对应的代码: /** * * importTeleFraudEvent:导入数据. * * @author qiyongkang * @param request * @return * @since JDK 1.6 */ @RequestMapping @ResponseBody public ExtJsObject importData(HttpServletRequest request) { ExtJsObject result = new ExtJsObject(false, "导入不成功", null); try { String path = request.getSession().getAttribute("justpath").toString(); File f = new File(path); FileInputStream fis = new FileInputStream(f); HSSFWorkbook book = new HSSFWorkbook(fis); result = userService.importData(book); } catch (Exception e) { e.printStackTrace(); return renderObject(false, "导入不成功", null); } return result; } @RequestMapping @ResponseBody public ExtJsObject exportData(User user, HttpServletRequest request, HttpServletResponse response) { List userList = null; try { if (user.getCurrentPage() != null && !user.getCurrentPage().equals(0)) { // 导出当前页 userList = userService.getPageList(user); } else { // 导出所有 userList = userService.listAll(user); } if (userList != null && userList.size() > 0) { // 开始导出,获取模板路径 String templatePath = request.getSession().getServletContext().getRealPath("template/user.xls"); // 写入工作簿 userService.exportData(userList, templatePath, response); } } catch (Exception e) { log.error("导出失败", e); return new ExtJsObject(false, "导出失败", null); } return new ExtJsObject(true, "导出成功", null); }以及对应的service实现: @Override public ExtJsObject importData(HSSFWorkbook workBook) { HSSFSheet sheet = workBook.getSheetAt(0); int startReadRow = 2; int lastRowNum = sheet.getLastRowNum(); for(int i = startReadRow; i |
CopyRight 2018-2019 实验室设备网 版权所有 |