excel批量导入数据
这个功能也是我以前项目中经常用到的,感觉很实用,必须拿来分享下:
excel进行批量导入数据,结合struts2+ajax
导入的视图:batchAdd.ftl(视图无关紧要的,可以换成其他任何视图,就是普通的form表单的提交,就是这里是调用ajax)
<div class="controltitle">当前操作:excel批量导入学生信息</div> <div> <form action="excelUploadAction.action" method="post" enctype="multipart/form-data" id="uploadInfor"onSubmit="return validateuploadInforFile(this);"><input type="file" name="uploadExcel"><input type="submit" value="提交"/><a href = "download/stuExcel.xls">[点击下载excel样例]</a> </form> </div> <div><div>下面是导入的excel的样式<font color = "red">[上传的excel中的内容必须按照这个顺序就行排版,否则存储内容的位置会错乱的]</font></div><table class="tablefirst" id="radioSubStyle"><tr><th>姓名</th><th>学号</th><th>性别</th><th>籍贯</th><th>专业</th><th>学制</th><th>入学年份</th><th>毕业年份</th><th>工作省市</th><th>工作单位</th><th>工作岗位</th><th>职务职称</th><th>电话</th><th>手机</th><th>qq</th><th>邮箱</th><th>通信地址</th><th>家庭地址</th></tr><tr><td>沈浪</td><td>1006010054</td><td>男</td><td>汉</td><td>眼7</td><td>7</td><td>2009-11-11</td><td>2011-11-11</td><td>浙江</td><td>医院</td><td>临床</td><td>主任</td><td>642</td><td>159</td><td>5449</td><td>544@qq.com</td><td>杭州</td><td>杭州</td></tr><tr><td>沈浪</td><td>1006010024</td><td>男</td><td>汉</td><td>眼7</td><td>7</td><td>2009-11-11</td><td>2011-11-11</td><td>浙江</td><td>医院</td><td>临床</td><td>主任</td><td>642</td><td>159</td><td>5449</td><td>544@qq.com</td><td>杭州</td><td>杭州</td></tr><tr><td>沈浪</td><td>1006010034</td><td>男</td><td>汉</td><td>眼7</td><td>7</td><td>2009-11-11</td><td>2011-11-11</td><td>浙江</td><td>医院</td><td>临床</td><td>主任</td><td>642</td><td>159</td><td>5449</td><td>544@qq.com</td><td>杭州</td><td>杭州</td></tr></table><div><font color="red">注:①excel各列的顺序必须按样式的顺序,而内容可依实际内容而定;这里不支持照片的导入,照片可在修改中进行上传②性别只能为‘男’与‘女’;③专业只能填:眼视光七年制;眼视光本科;眼视光专科;否则会影响后面的查询</font></div> </div> <div id="excelUploadMsg"></div>
传入的js(ajax+文件的验证):这里涉及到的ajax可以去阅读:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452670.html
/*** 以下是上传excel的一系列方法* */ function validateuploadInforFile(form){if(!validateExcelUpLoadFile(form)) return false;var options = { dataType: 'json',success: showResponse };$("#uploadInfor").ajaxSubmit(options); return false; }function showResponse(responseText){$("#excelUploadMsg").empty();$("#excelUploadMsg").append(responseText.msg);} //导入考试时进行文件格式校验 function validateExcelUpLoadFile(form) {var fileName = form.uploadExcel.value;if (fileName != "" ) {var fileType = (fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length)).toLowerCase();var suppotFile = ["xls", "XLS", "xlsx", "XLSX"];for (var i = 0; i < suppotFile.length; i++) {if (suppotFile[i] == fileType) {return true;} else {continue;}}alert("文件格式不正确!");return false;} else {alert("请选择你需要的导入 的文件");return false;} }
struts.xml:
<!-- excel导入 --><action name="excelUploadAction" class="xidian.sl.action.StuInforAction" method = "excelUpload"><interceptor-ref name="fileUpload"/><interceptor-ref name="defaultStack" /><result name="success">/WEB-INF/responseMsg.jsp</result></action>
action中的方法处理:再次进行文件的验证和调用服务层进行excel的处理和数据持久化
//以下为单文件上传,即excelprivate File uploadExcel; //文件private String uploadExcelFileName; //文件名private static String[] allowFileType = { "xls", "XLS", "xlsx", "XLSX" }; //控制文件类型/*** excel批量导入* */public String excelUpload(){try{if ((uploadExcelFileName == null) || (uploadExcelFileName.equals(""))) {response = "{success:false,msg:'文件名不能为空!'}";}if (!(FileUtil.validateFileType(uploadExcelFileName, allowFileType))) { //validateFileType方法在FileUtil中,返回的是boolean值response = "{success:false,msg:'文件类型不正确!'}";}excelBatchInput.uploadStu(uploadExcel); //只传入一个excel文件response = "{success:true,msg:'"+excelBatchInput.getFinalMsg()+"'}"; //得到结果的回复}catch (Exception e) {e.printStackTrace();response = "{success:true,msg:'sorry: 导入失败'}";}return SUCCESS;}
serviceInterface:
package xidian.sl.service.admin;import java.io.File;public interface ExcelBatchInput {/*** excel导入的主要逻辑* */public String uploadStu(File upload);/*** 导入后的消息* */public String getFinalMsg(); }
ServiceImpl:(这里对excel的内容没有做过多的验证,只是验证了学号为不重复,大家可以自行对其进行添加)
package xidian.sl.service.impl.admin;import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.List;import jxl.Cell; import jxl.CellType; import jxl.DateCell; import jxl.LabelCell; import jxl.Sheet; import jxl.Workbook; import xidian.sl.dao.admin.StuInforDAO; import xidian.sl.entity.StuInfor; import xidian.sl.service.admin.ExcelBatchInput;public class ExcelBatchInputImpl implements ExcelBatchInput {private Sheet sheet;private String[][] excelValue;private int successRow;private int failRow;private StringBuilder msg=new StringBuilder();private String finalMsg;private StuInforDAO stuInforDAO;/*** excel导入的总方法*/public String uploadStu(File upload) {initExcel(upload); //初始化readExcel(); //读取insertIntoDB(); //插入return msg.toString();}/*** 读取excel文件中数据,保存到sheet对象中* @param upload*/private void initExcel(File upload) {Workbook rwb = null;try {InputStream is = new FileInputStream(upload);rwb = Workbook.getWorkbook(is);sheet = rwb.getSheet(0);} catch (Exception e) {e.printStackTrace();}}/*** 读取excel中数据进入excelValue数组中*/private void readExcel(){excelValue = new String[sheet.getRows()][sheet.getColumns()];for (int i = 0; i < sheet.getRows(); i++)for (int j = 0; j < sheet.getColumns(); j++) {Cell cell = sheet.getCell(j, i);if ("".equals(cell.getContents().toString().trim())){excelValue[i][j] = "";}if (cell.getType() == CellType.LABEL) {LabelCell labelcell = (LabelCell)cell;excelValue[i][j] = labelcell.getString().trim();} else if (cell.getType() == CellType.NUMBER){excelValue[i][j] = cell.getContents();} else if (cell.getType() == CellType.DATE) {DateCell datcell = (DateCell)cell;excelValue[i][j] = datcell.getDate().toString();} else {excelValue[i][j] = cell.getContents().toString().trim();}}}/*** 3.保存进入数据库* @param course*/private void insertIntoDB() {int excelRows = excelValue.length;//将消息清空msg.delete(0, msg.length());finalMsg = "";successRow = 0;failRow = 0;if (excelValue.length > 1) {for (int i = 1; i < excelRows; i++) { //从第二排开始,第一排为文字说明String[] DBValue = excelValue[i]; //取一行数据if (validateInfor(i,DBValue)){successRow += 1;finalInsert(DBValue);} else {failRow += 1;}}finalMsg = "录入成功结束:"+"</br>"+"目标导入学生:"+(successRow+failRow)+"</br>"+"成功录入数:"+(successRow)+"</br>"+"失败录入数:"+(failRow)+"</br>"+msg.toString();System.out.println(finalMsg);} else {finalMsg = "excel中无任何数据!";System.out.println("excel中没有任何数据");}}//最终返回检验结果private boolean validateInfor(int i,String[] DBValue){Boolean bol=true;if(!(validateNumRepeat(i,DBValue))){bol=false;}return bol;}//验证岗位是否重复private boolean validateNumRepeat(int i,String[] DBValue){boolean bolValidate=true;/*** 主要检查学号是否有重复* 这里需要改进,因为这里会每插入一条就会进行一次数据库的搜索* */String hql = "from StuInfor";List<StuInfor> stuInfors = stuInforDAO.getStuInforListByHQL(hql);for(StuInfor stuInfor: stuInfors){if(stuInfor.getStuNum().equals(DBValue[1]) && DBValue[1]!=""){bolValidate=false;msg.append("错误信息:第"+i+"学生的学号与数据库已存储的重复,该学号是["+DBValue[1]+"],导入的学生名字["+DBValue[0]+"],请检查!</br>");return bolValidate;}}return bolValidate;}//最终插入数据,这里需要修改private void finalInsert(String[] DBValue){StuInfor stuInfor = new StuInfor();stuInfor.setStuName(DBValue[0]);stuInfor.setStuNum(DBValue[1]);stuInfor.setStuSex(DBValue[2]);stuInfor.setStuJg(DBValue[3]);stuInfor.setStuZy(DBValue[4]);stuInfor.setStuXz(DBValue[5]);stuInfor.setStuStartTime(DBValue[6]);stuInfor.setStuEndTime(DBValue[7]);stuInfor.setStuWorkAddress(DBValue[8]);stuInfor.setStuWorkPlace(DBValue[9]);stuInfor.setStuWorkPost(DBValue[10]);stuInfor.setStuWorkZc(DBValue[11]);stuInfor.setStuPhone(DBValue[12]);stuInfor.setStuTelephone(DBValue[13]);stuInfor.setStuQq(DBValue[14]);stuInfor.setStuEmail(DBValue[15]);stuInfor.setStuCommAddress(DBValue[16]);stuInfor.setStuAddress(DBValue[17]);stuInfor.setDeleteSign("1");stuInforDAO.makePersistence(stuInfor);}public Sheet getSheet() {return sheet;}public void setSheet(Sheet sheet) {this.sheet = sheet;}public String[][] getExcelValue() {return excelValue;}public void setExcelValue(String[][] excelValue) {this.excelValue = excelValue;}public int getSuccessRow() {return successRow;}public void setSuccessRow(int successRow) {this.successRow = successRow;}public int getFailRow() {return failRow;}public void setFailRow(int failRow) {this.failRow = failRow;}public StringBuilder getMsg() {return msg;}public void setMsg(StringBuilder msg) {this.msg = msg;}public String getFinalMsg() {return finalMsg;}public void setFinalMsg(String finalMsg) {this.finalMsg = finalMsg;}public StuInforDAO getStuInforDAO() {return stuInforDAO;}public void setStuInforDAO(StuInforDAO stuInforDAO) {this.stuInforDAO = stuInforDAO;} }
里面涉及到的持久层的操作我这里就省略不写了
转载于:https://www.cnblogs.com/shenliang123/archive/2012/04/17/2453664.html
excel批量导入数据相关推荐
- 【转帖】Java实现Excel批量导入数据
这篇文章主要为大家详细介绍了Java实现Excel批量导入数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Excel的批量导入是很常见的功能,这里采用Jxl实现,数 ...
- SpringMVC框架通过Excel批量导入数据
文章目录 SpringMVC框架通过Excel批量导入数据 1.导入需要的jar包 2.配置文件 3.创建Java对象类 4.解析Excel表格数据的工具类 5.前端请求 6.Controller处理 ...
- Spring Boot 实现excel 批量导入数据(模板下载 ->数据导入->导入失败表格下载)
批量导入数据以用户为例[不贴数据库操作代码,都是简单的插入和查询操作自己写] 1 导入依赖 2 批量导入模板下载 3 批量导入数据 准备工作 实现代码 测试接口 4 下载导入失败表格 5 实体类 6 ...
- java使用POI实现Excel批量导入数据。
1.背景 项目中有使用easypoi,处理常规excel问题,但是现在有个需求,需要动态生成导出的报表字段.同时,根据导入的excel,增加数据信息.(有可能会出现,导入的报表是几天前下载的,不会最新 ...
- EXCEL批量导入数据MVC
这里简单实现EXCEL的批量导入 直接看代码,里面有注释 前端页面实现 @{ ViewBag.Title = "批量添加数据"; //Layout = null; } href=& ...
- Springboot Excel批量导入数据
POI处理Excel <!-- poi处理excel --><dependency><groupId>org.apache.poi</groupId>& ...
- Java实现Excel批量导入数据
Excel的批量导入是很常见的功能,这里采用 Jxl实现,数据量或样式要求较高可以采用 poi 框架环境:Spring + SpringMvc(注解实现) 首先导入依赖jar包 <depende ...
- 如何使用excel批量导入数据到数据库?看这一篇就够了!超详细
应用场景 当我们遇到要批量新增数据库条数的时候 1.你可以写一个接口去用excel去导入,可以自动化,但是前提是你知道你要新增的表和流程才可以 2.可以用excel直接进行数据库导入 excel导入数 ...
- php 用excel 批量导入数据
public function post(){if($this->request->isPost()){vendor("PHPExcel.PHPExcel");//导入 ...
最新文章
- MindSpore后端运行类
- pytorch实现手写数字识别_Paddle和Pytorch实现MNIST手写数字集识别对比
- 小米语音首席科学家Daniel Povey:下一代Kaldi将走向何方?
- 最佳实践系列:前端代码标准和最佳实践
- 不可思议的素数(上)(文末送书)
- 云时代 揭开性能监测战略的隐秘优势
- python刷阅读_简单的37行python爬虫刷CSDN博客阅读数
- 边缘检测后去除噪点_Street Lanes Finder - 检测自动驾驶汽车的车道
- 2012年云计算领域将发生6件大事
- Java21天打卡-Day15 数组
- HDU2188 选拔志愿者【巴什博弈】
- oracle sql 查询无数据_信运大讲堂丨ORACLE数据库SQL和索引
- 日志系统模块基础、C语言实现一个日志模块、zlog日志模块基础
- My Firest FireMonkey App
- WS2812B 5050数据整理
- 国产数据库--HighGo DB(瀚高数据库)
- Python实战:利用正则表达式(requests模块)获取电影排行榜
- Android系统各个版本发布时间
- 3.3. debug ip igrp
- 数据库《实验一 SQL Server数据库及对象的设计》
热门文章
- SpringMVC:400 Bad Request
- Tomcat服务器报错IOException: Broken pipe
- meta refresh 刷新
- msclass 文字滚动_MSClass (通用不间断滚动JS封装类)
- 【PAT乙】1030 完美数列 (25分) 枚举
- 【codevs1295】N皇后问题
- php 批量删除挂马文件夹,PHP批量挂马脚本
- java多线程上传文件_Java大文件分片上传/多线程上传
- Python入门--字符串的判断操作
- 排列:计算1!+2*2!+3*3!+...+n*n!