在各种管理系统中,数据的导入导出是经常用到的功能,通常导入导出以Excel、CSV格式居多。如果是学习的过程中,最好是自己实现数据导入与导出的功能,然而在项目中,还是调用现成的功能比较好。近期一直使用一款名叫JeeSite的开源项目来进行二次开发,就记录一下该项目对于Excel导入导出数据的过程。JeeSite提供了很好的Excel的导入导出功能,隐藏了底层的很多实现,通过简单的套路式步骤即可完成数据的Excel数据的导入导出。对于没有使用过JeeSite的可以不用往下看了,因为下面的代码是跟JeeSite二次开发相关的代码,不做JeeSite的二次开发,以下代码对您无用,在这里友情提醒,避免浪费您宝贵的时间。

导入导出步骤

无论是JeeSite系统,还是其他的系统或者自己写的系统,对于数据导入导出功能而言,首先要确定的是导入导出哪些数据的字段,然后提供一个导入的模板,编写导入导出的功能,最后在页面上提供导入导出的操作方式来供使用者进行使用。

定义导入导出字段

在导入导出数据时会先确定要导入导出数据的哪些关键字段,在确定好字段之后,通过数据库查询出的数据根据字段逐个的导出,或者通过读取的Excel逐个的读入。在JeeSite中,确定要导入导出的字段以后,在JeeSite的实体类中可以通过注解来进行说明,注解方法如下:

1 @ExcelField(title="列名1", align=2, sort=10)

这样定义,就可以将类中的字段与Excel的列进行关联,包括列名称和排序。例子如下:

1 @ExcelField(title="名称", align=2, sort=10) 2 public String getName() { 3 return name; 4 } 5 6 @ExcelField(title="年龄", align=2, sort=20) 7 public String getAge() { 8 return age; 9 }

在实体类的getter方法上添加@ExcelField注解,就完成了Excel列名称与实体类字段的关联。

Excel数据导出功能

对于JeeSite中的导出功能完全是套路,只要简单的3行就可以完成一个导出功能,首先设置导出文件名,接着查询导出数据,最后调用ExportExcel()来完成Excel的导出,例子代码如下:

1 @RequestMapping(value = "export", method=RequestMethod.POST) 2 public String exportFile(Info info, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) { 3 try { 4 String fileName = "信息数据"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx"; 5 // 调用获取数据的方法 ... 省略 6 new ExportExcel("信息数据", Info.class).setDataList(page).write(response, fileName).dispose(); 7 return null; 8 } catch (Exception e) { 9 addMessage(redirectAttributes, "信息数据导出失败!失败信息:"+e.getMessage()); 10 } 11 return "redirect:" + adminPath + "/info/Info/list?repage"; 12 }

return后的地址,根据实际的Controller来填写。

导入模板

导入模板是用来给系统使用者在导入数据时使用的,有了导入模板就相当于有了一个导入的规范,确定需要导入哪些列来让使用者填入。在JeeSite中,导入模板并不用事先提供一个Excel,而是通过代码直接生成一个Excel文件,Excel文件中的列也是由前面实体类中确定的,这样的好处是,当列的数量改变时不用人为的去替换修改Excel,因为它是有代码生成的。导入模板的代码例子如下:

1 @RequestMapping(value = "import/template") 2 public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) { 3 try { 4 String fileName = "信息数据导入模板.xlsx"; 5 List list = Lists.newArrayList(); 6 list.add(new Info()); 7 new ExportExcel("信息数据", Info.class, 2).setDataList(list).write(response, fileName).dispose(); 8 return null; 9 } catch (Exception e) { 10 addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage()); 11 } 12 return "redirect:" + adminPath + "/info/Info/list?repage"; 13 }

此处return后的地址,也是根据实际的Controller来填写。

Excel数据导入功能

用户下载好数据模板后,将相应的数据填写好,就可以进行数据的导入了。数据的导入是对Excel中的数据不断进行遍历和保存的一个过程,代码虽然比导出要长,但是也完全是套路,代码如下:

1 @RequestMapping(value = "import", method=RequestMethod.POST) 2 public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) { 3 4 try { 5 int successNum = 0; // 导入成功计数 6 int failureNum = 0; // 导入失败计数 7 StringBuilder failureMsg = new StringBuilder(); 8 ImportExcel ei = new ImportExcel(file, 1, 0); 9 10 List list = ei.getDataList(Info.class); 11 12 for ( Info info : list ) { 13 // ... 14 if ( ... ) { // 导入条件的判断 15 // 符合导入条件 16 // 保存 ... 方法省略 17 successNum++; 18 } else { 19 // 不符合导入条件 20 failureMsg.append("
名字 " + info.getName() + " 已存在; "); 21 failureNum++; 22 } 23 } 24 25 if (failureNum>0){ 26 failureMsg.insert(0, ",失败 " + failureNum + " 条信息,导入信息如下:"); 27 } 28 29 addMessage(redirectAttributes, "已成功导入 " + successNum + " 条片区信息" + failureMsg); 30 31 } catch (Exception e) { 32 // TODO Auto-generated catch block 33 e.printStackTrace(); 34 } 35 36 return "redirect:" + adminPath + "/info/Info/list?repage"; 37 }

添加导入导出按钮

在页面上添加两个按钮,分别是导入和导入按钮,代码如下:

1

2 3 4

导入时弹出的窗口

在点击“导入”按钮时会弹出一个窗口,窗口中可以提供导入文件选择,也可以下载导入模板。代码如下:

1

2
4
   5 6 下载模板 7 8

在代码中,需要修改action和href后的具体路径才能保证数据的提交,和模板下载的地址,具体地址根据自己项目中的Controller来进行替换。

控制导入导出按钮的JS代码

对于导出按钮来说,需要通过action来讲数据进行导出,对于导入按钮来说只是需要把导入时显示的窗口显示出来即可。相关代码如下:

1 $(document).ready(function() { 2 $("#btnExport").click(function(){ 3 top.$.jBox.confirm("确认要导出片区数据吗?","系统提示",function(v,h,f){ 4 if(v=="ok"){ 5 $("#searchForm").attr("action","${ctx}/info/Info/export"); 6 $("#searchForm").submit(); 7 } 8 },{buttonsFocus:1}); 9 top.$('.jbox-body .jbox-icon').css('top','55px'); 10 }); 11 $("#btnImport").click(function(){ 12 $.jBox($("#importBox").html(), {title:"导入数据", buttons:{"关闭":true}, 13 bottomText:"导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!"}); 14 }); 15 });

对于需要使用JeeSite开源项目进行二次开发的话,上面的代码算是一个比较详细的笔记了,如果不使用JeeSite开源项目的话,上面的代码就没有什么用处了。这篇笔记留个自己和需要的人吧。我还会陆续的发一些关于JeeSite的二次开发的笔记。

注:我使用的JeeSite是3.X版本的,不是最新的JeeSite 4的版本。

jeesite html导入excel,JeeSite中Excel导入导出相关推荐

  1. python怎么导入sql数据库,##使用python将excel表中数据导入sql server数据库

    如何用python将excel数据导入到postgresql数据库中 把excel表格另存为csv文件 python将exce文件含有多个sheet同时l导入sqlserver数据库 需要使用xlrd ...

  2. matlab excel导入矩阵,如何将excel中数据导入到matlab中!Excel导入matlab生成矩阵

    如何将excel中数据导入matlab并存入数组中 使用Matlab中的Excel Link就可以了. 如果使用Excel 2003版本,操作如下: 1 打开Excel. 2 在菜单栏中选择→加载项→ ...

  3. 如何将Excel文件中数据导入数据库

    最近在公司中遇到一个问题,需要将Excel中的数据导入数据库,开始我的思路是:解析Excel文件,或许所需数据,生成SQL语句,然后在数据库中执行,如果有需要这样写的,可以在我的主页中下载,我已经上传 ...

  4. oracle 导入excel时间格式,excel表格导入时间数据库中-excel导入数据库,我的日期是datatime()自动生成......

    如何将excel表格数据导入到oracle数据库对应的表中? 假定a1是你的mysql中的时间戳,要在B1取得普通的时间表示,则b1= =25569 A1*0.0000115743621516652 ...

  5. 如何将excel表格导入word_分享一种批量将Excel表格中联系方式导入至手机通讯录中的方法...

    今天看到有个做销售的小哥在头条问问上提到如何将Excel表格中的顾客号码批量导入至手机通讯录中,无奈条友们的层次果然很低,没有几个说出所以然的,现在我就分享一种方法导入一下. 首先打开QQ邮箱,点&q ...

  6. mysql navicat导入bcp_SQL Server中BCP导入导出用法详解

    bcp命令是SQL Server提供的一个快捷的数据导入导出工具.使用它不需要启动任何图形管理工具就能以高效的方式导入导出数据.bcp是SQL Server中负责导入导出数据的一个命令行工具,它是基于 ...

  7. python怎么导入视频-python中的导入如何使用,以及.和..相对导入的使用

    python中的import 和from xx import xxx基本上是我们最常用的功能了.但是对于相对导入的使用估计很多人会存在很多疑惑. 1 . 在编程过程中,在某些情况下,我们可以使用相对导 ...

  8. Rviz中如何导入自定义障碍物 | 从建模到导出urdf到导入rviz | Ros中如何导入障碍物 | sw2urdf的下载和使用 | MeshLa的下载和使用

    配置: Ubuntu20.04 Solidworks2016 sw2urdf1.5.1(GitHub下载链接) MeshLab(GitHub下载链接) 目标 本文希望在Solidworks中自己完成障 ...

  9. android数据库导入,Android项目中如何导入数据库

    Android项目中如何导入数据库 发布时间:2020-11-24 16:43:28 来源:亿速云 阅读:110 作者:Leah Android项目中如何导入数据库?很多新手对此不是很清楚,为了帮助大 ...

  10. java填充excel表格中_填充导出Java导出excel表格

    近期朋友几篇文章介绍了改填充导出的文章. 关联文章的地址 之前做项目的时候需要数据库导出excel格式,由于项目赶没实现,现在分享下如何用java导出excel.话不多说案例如下: 首先要做的是导入一 ...

最新文章

  1. C# 中字符串string和字节数组byte[]的转换,16 进制字符串转 int的方法
  2. 说说在MVC开发中,遇到的错误及解决方法(本文章是我在实际开发中总结出来的,希望对您有帮助)...
  3. java标注释_跪请JAVA高手帮忙标一下注释
  4. [crypto]-31-crypto engion的学习和总结
  5. mysql innodb学习笔记
  6. JNI传递字符串数组J-StringArray
  7. 【Maven学习】Maven打包生成包含所有依赖的jar包
  8. https 密钥 php,https加密方式是什么
  9. 一年级前一学期计算机应用题,一年级计算机应用基础(二)
  10. Docker系列四~docker安装mysql
  11. Windows 64位下装Oracle 11g,PLSQL Developer的配置问题,数据库处显示为空白的解决方案...
  12. 滴滴开源夜莺 Nightingale:企业级监控解决方案
  13. setsockopt用法详解
  14. 响应式个人简历网页源代码
  15. 干货!软考高级网络规划设计师备考经验分享
  16. java js css 压缩工具_JSCSS压缩工具YUICompressor
  17. 理票侠打开OFD格式发票步骤
  18. servlet容器,web容器,spring容器,springmvc容器的区别
  19. 电脑说话,我家的电脑成精了!它开口说话了
  20. 【安全狐】CVE-2016-3088_ActiveMQ任意文件写入漏洞

热门文章

  1. 第4节:ZigBee MAC层介绍
  2. Ionic 安装运行
  3. windows下mingw64编译glog
  4. Ubuntu系统下网络连接不上的问题!!!
  5. 网络赚钱靠谱项目推荐和骗局陷阱
  6. Mastodon 长毛象多租户:自定义域名、自定义账号别名
  7. redis+mysql
  8. 01、利用OpenCV和numpy对图片进行堆砌
  9. java instr()_Oracle的instr函数
  10. OpenGL之鼠标控制坐标系旋转、缩放、移动