java web Excel导入、导出的实现 您所在的位置:网站首页 网页数据怎么导入excel java web Excel导入、导出的实现

java web Excel导入、导出的实现

2024-02-08 20:31| 来源: 网络整理| 查看: 265

在做web开发时,我们经常会用到数据表格的导入导出功能,这样可以帮我们节省人工操作的时间,极大提高办事效率,下面,直入正题: 笔者所做的导入导出是针对java springMVC框架、工作簿poi以及前端plupload.js插件设计的。

第一步、总体介绍

首先,来看页面展示,如下图: 这里写图片描述 导入菜单包含模板下载和导入数据,如下图: 这里写图片描述 点击模板下载,弹出模板下载对话框,如下图: 这里写图片描述 点击导入数据,弹出导入对话框,如下图: 这里写图片描述 接下来,再来看看导出,包含导出当前页和导出全部,如下图: 这里写图片描述 点击导出当前页或是导出全部后,生成excel,如下图: 这里写图片描述 最后再来看看导入模板和生成的excel,如下图: 这里写图片描述 我的模板是放在src/main/webapp/template下的。

第二步、模板下载和导入

首先,来看看前台导入、导出的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 +="开始上传文件"; begin +=""; $(".plupload_header").html(begin); }, //上传完毕后触发 UploadComplete:function(uploader,fs){ var e= errors.length ? ",失败"+errors.length+"个("+errors.join("、")+")。" : "。"; var begin = ""; var value=parseInt(fs.length)-parseInt(errors.length); begin +="上传完成!共"+fs.length+"个。成功"+value+"个"; begin +=""; $(".plupload_header").html(begin); importdata(importurl,callback); } } },(chunk ? {chunk_size:'1mb'} : {}))); }); /** * 导入数据 * @param importurl * @param callback */ function importdata(importurl,callback){ var des = ""; des +="正在解析入库"; des +=""; $(".plupload_header").html(des); $.ajax({ url:importurl, type:"POST", dataType: "json", success: function (data) { var msg = ""; msg +=data.msg; msg +=""; $(".plupload_header").html(msg); //回调,重新加载数据 var iframe = $('#mainPanel > iframe' ,window.top.document)[0]; var currentChildWindow = iframe.contentWindow || iframe.window; console.log('callback', callback); currentChildWindow[callback]('qiyongkang'); } }); }

其中的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 实验室设备网 版权所有