JAVA 导入EXCEL文档
来源:互联网 发布:js获取手机app版本号 编辑:程序博客网 时间:2024/05/16 06:34
最近负责后台,要实现一个导入excel表格的功能,费了一些时间才实现功能,现在记录下来,分享一下: 1).controller中实现的方法
@RequestMapping("uploadExcel.htm") public void fileUpload(@RequestParam("excelFile") MultipartFile file,Boolean rename,String callback,HttpServletResponse response){ String message = ""; String json = ""; int result1=2; StringBuffer buf = null ; System.out.println(file.getOriginalFilename()); if (file != null && !file.isEmpty()) { try { int countError =0; //错误数目 String filename = file.getOriginalFilename(); buf = new StringBuffer(); if(! (filename.endsWith("xls") || filename.endsWith("xlsx")) ){ System.out.println("请上传扩展名为xls的文件"); } String extName = filename.substring(filename.lastIndexOf(".") + 1);//扩展名 if (file != null && !file.isEmpty()){ String[][] result = ReadExcelUtils.getData(extName,file.getInputStream(), 1); int rowLength = result.length; List<Video> list = new ArrayList<Video>(); // 前500条数据存在list中 List<List<Video>> outList = new ArrayList<List<Video>>(); //存满500条数据,将list集合放入outList中 Long parentId = null;// for (int i = 1; i <= rowLength; i++) { System.out.println("正在处理第" + i + "条数据"); String[] column = result[i-1]; Video video = new Video(); String var = column[0].trim(); if (var.length() > 0){ Partners partners = partnersService.searchByName(var);//(这块是根据名称需要在其他表中查询信息,如果没有需要可以参考下面名称格式,直接设置值即可) if (partners!=null) { video.setPartnerId(partners.getId()); video.setPartnerName(var); }else { buf.append("第"+ i +"行合作不存在,"); countError++; continue; } }else{ buf.append("第"+ i +"行合作为空,"); countError++; continue; } var = column[1].trim(); if (var.length() > 0){ video.setName(var); }else{ buf.append("第"+ i +"行名称为空,"); } //判断错误是否大于20 if (countError > 20){ break; } list.add(video); //存满500条数据,将list集合放入outList中 if (list.size()>=500){ outList.add(list); list = new ArrayList<Video>(); } } if(list.size() > 0) outList.add(list); if (buf.toString().length() > 0){ result1 = 2; message = "错误信息:"+ buf.toString() ; json = "{\"result\":"+result1+",\"message\":\""+message+"\"}"; printObject(response,"<script>parent."+callback+"('"+json+"');</script>"); return ; } for(List<Video> videoList : outList){ // 取出outList中的数据,并将数据存入数据库中 videoService.saveExcelToSQL(videoList); } System.out.println("导入成功"); } } catch(Exception e){ e.printStackTrace(); } result1 = 1; message = buf.toString() ; json = "{\"result\":"+result1+",\"message\":\""+message+"\"}"; printObject(response,"<script>parent."+callback+"('"+json+"');</script>"); }else { result1 = 2; message = "请选择文件"; json = "{\"result\":"+result1+",\"message\":\""+message+"\"}"; printObject(response,"<script>parent."+callback+"('"+json+"');</script>"); } }
2).list.html中提交文件
<div style="width: auto;height: auto;vertical-align: middle;" align="center"> <form id="uploadImg" method="POST" enctype="multipart/form-data" action="video/uploadExcel.htm" target="uploadImgFrame"> <input type="hidden" name="callback" id="img_callback" value="img_callback"/> <iframe id="uploadImgFrame" name="uploadImgFrame" style="display: none;"></iframe> <table class="editTable"> <tr> <td class="title" style="width:40%">选择文件:</td> <td class="content"> <input id="fileid" name="excelFile" type="file" /> </td> <td style="padding-left: 20px; "><input type="button" onclick="submit_img();" value="导入excel表"/></td> </tr> </table> </form></div>3). 通过service层save方法,将数据保存到数据库中@Override public ResultBase saveExcelToSQL(List<Video> videoList) { for (Video video : videoList) { try { video.setOrderNum(num); video.setOnline(1); video.setCreateTime(DateUtils.getToday( "yyyy-MM-dd HH:mm:ss")); videoDao.insert(video); } catch (Exception e) { e.printStackTrace(); } } return null; }4). js回调获取结果function img_callback(result){ $.messager.progress('close'); var data = JSON.parse(result); if (data.result==1) { alert("导入成功 :"+data.message); $('#video_grid').datagrid('reload'); } else { alert("导入失败 :"+data.message); } if(imgCallback) imgCallback(data);}关键代码就是这些,需要注意的就是导入时对文档字段的需求,哪些字段不能为空,哪些可以为空; printObject()方法可以将结果返回到html界面,如果你的界面使用jsp实现,并且对返回的界面没有硬性要求的话,可以自己写界面,将controller的返回值更改为String类型,用controller和jsp界面交互方法,直接返回到自定义界面同样可以。
至于原理,传excel文档和传图片本质上是一个道理,将上传的文件转化为流,将流传到服务器,由服务器进行接收保存。当然这些,都已经封装成工具类了,程序猿们在使用的时候,只需要将工具类导入就可以。我整理之后,会将代码贴出来。
补充:今天(16.06.16)同事测试的时候发现:如果在excel中直接设置名称为数字 ,那么导入名称的时候,后台接收到的值为**.00,也就是默认带两位小数的,(这个debug可以看到,)这样,再用这个值去后台查询就查询不到数据了,所以如果出现数据中带数字的,导入的时候一定要注意,需要再验证之前,先用replace方法,将数字后面的”.00”去掉。
阅读全文
0 0
- JAVA 导入EXCEL文档
- JAVA 导入EXCEL文档
- web导入excel文档
- 利用Java导入并操作 Microsoft Excel 文档
- 导入excel文档是报错java.io.IOException: Invalid header signature;
- java代码写excel和文本文档的导入导出
- java 将 txt、excel 、xml 文档导入数据库
- Excel文档导出和导入
- thinkphp 导出Excel文档,导入Excel文档;PHPExcel的使用
- Java数据导入Excel
- JAVA 数据导入Excel
- JAVA 导入导出Excel
- java excel导入导出
- java excel导入导出
- java导入Excel示例
- Java实现导入Excel
- java导入/导出excel
- JAVA excel 导入
- 最常见的管理误区,你中招了吗?
- Gym 101194F Mr. Panda and Fantastic Beasts
- JavaScript(4)__Js基础<字符串>
- 澳门拥抱阿里云:全面应用智能技术,为城市装上“大脑”
- domain和cluster结合让nodejs更加健壮的运行
- JAVA 导入EXCEL文档
- http简介
- 新手学xingo golang服务器之-golang和unity3d的Protobuf生成(三)
- Java搞定面试中的二叉树题目
- laravel各种路径的获取方法
- Java设计模式 原型模式(Prototype)
- POJ 3714 Raid(分治)
- 剑指offer--树的子结构
- Linux基本概念