最近做了一个excel导入功能,思路很简单,给一个上传excel文件的入口,然后获取excel文件的sheet签和签中的数据,可以对数据对象进行业务处理,当然也可以数据存入数据库中
代码如下:jsp页面:一个上传excel附件表的入口,ajax方法请求后台
          controller:后台控制层,用于前端的调用
          service:业务处理,控制层传过来的参数用于处理业务,也可以调用多个工具类
          excel工具类:在这里获取excel中的数据,获取数据后做一系列的业务处理

jsp页面代码:

<div id="msgdiv" style="text-align: center;font-size: 16px;color: red;">${msg}</div>
<tr valign="middle" class="mytr"><td width="30%" height="25" class="tdtitbgcorl" align="left"  style="text-align:left;">团员关系数据导入</td><td ><input type="file" name="sxfile" id="sxfile"  /></td><td ><input type="button" name="stsx" id="stsx" value="导入数据"  onclick="execSx()" />&nbsp;&nbsp;</td>
</tr>
<script type="text/javascript">
function execSx(){if($("#sxfile").val()==""){alert("附件不可为空!");return;}var formData = new FormData();formData.append("file",$("#sxfile")[0].files[0]);$.ajax({url:'xxxxxx.action?method=doDataImportTygxzcb',type:'POST', async:false,data:formData,// 告诉jQuery不要去处理发送的数据processData : false,// 告诉jQuery不要去设置Content-Type请求头contentType : false,timeout:40000,dataType:'json',beforeSend:function(){console.log("正在进行,请稍候");$("#msgdiv").text("正在导入数据,请稍候...");},success:function(data,textStatus,jqXHR){console.log(data);console.log(textStatus);console.log(jqXHR);if("1"==data.msgcode){$("#msgdiv").text("导入数据成功!");}else{$("#msgdiv").text("导入数据失败!");}alert(data.msg);},error:function(xhr,textStatus){console.log('错误');console.log(xhr);console.log(textStatus);$("#msgdiv").text("导入数据失败或任务执行超时...");}});
}

controller层代码:

public ModelAndView doDataImportTygxzcb(HttpServletRequest req, HttpServletResponse res) throws Exception {HashMap resultMap = new HashMap();resultMap.put(super.ACTIONKEYSTR, this.ACTIONKEY);String msg = "导入失败!";String msgcode = "0";MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)req;  MultipartFile mfile = multipartRequest.getFile("file");if(mfile==null || mfile.isEmpty() || mfile.getSize()==0L) {msg = "附件不可为空!";resultMap.put("msg", msg);return new ModelAndView("jsonView", resultMap);  //这里注意返回的是json,不是视图}try {xstjTqtjTyxxService.saveTyxxbyTygxzcbExcel(mfile);msg = "团员关系注册表数据导入成功!";msgcode = "1";} catch (Exception e) {e.printStackTrace();}resultMap.put("msg", msg);resultMap.put("msgcode", msgcode); return new ModelAndView("jsonView",resultMap);        //这里注意返回的是json,不是视图
}

service层代码:

public void saveTyxxbyTygxzcbExcel(MultipartFile mfile) {// TODO Auto-generated method stubInputStream in = null;org.apache.poi.ss.usermodel.Workbook workbook=null;try {in = mfile.getInputStream();workbook = WorkbookFactory.create(in);//这里可以同时调用多个工具类中的方法XstjExcelToolApi.api.analyzeXstjTyxxbyTygxzcb(workbook);} catch (Exception e) {e.printStackTrace();}finally {if(in!=null) {try {in.close();} catch (Exception e) {}}}}

excel工具类代码:

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.weboa.web.StaticLoad;import org.weboa.dao.CommonDao;public class XstjExcelToolApi {public static XstjExcelToolApi api = new XstjExcelToolApi();private CommonDao commonDao = (CommonDao) StaticLoad.getBean("commonDao");private FormulaEvaluator evaluator = null;private String getCellValue(Cell cell){String cellValue = "" ;if(cell!=null){switch(cell.getCellType()){case  Cell.CELL_TYPE_NUMERIC:if (HSSFDateUtil.isCellDateFormatted(cell)) {  double d = cell.getNumericCellValue();  Date date = HSSFDateUtil.getJavaDate(d); SimpleDateFormat dformat=new SimpleDateFormat("yyyy-MM-dd");cellValue=dformat.format(date);}else{NumberFormat nf = NumberFormat.getInstance();nf.setGroupingUsed(false);//true时的格式:1,234,567,890nf.setMaximumFractionDigits(9); //设置数值的小数部分允许的最大位数。 nf.setMinimumFractionDigits(0);cellValue= nf.format(cell.getNumericCellValue());//数值类型的数据为double,所以需要转换一下}break;case Cell.CELL_TYPE_STRING:cellValue=StringUtils.trim(cell.getStringCellValue());break;case Cell.CELL_TYPE_BOOLEAN:cellValue=String.valueOf(cell.getBooleanCellValue());break;case Cell.CELL_TYPE_FORMULA:cellValue=getCellValue(evaluator.evaluate(cell));break;default:cellValue="";break;}}return cellValue ;}private static String getCellValue(CellValue cell) {String cellValue = null;switch (cell.getCellType()) {case Cell.CELL_TYPE_STRING:System.out.print("String :");cellValue=cell.getStringValue();break;case Cell.CELL_TYPE_BOOLEAN:cellValue=String.valueOf(cell.getBooleanValue());break;case Cell.CELL_TYPE_NUMERIC:System.out.print("NUMERIC:");cellValue=String.valueOf(cell.getNumberValue());break;case Cell.CELL_TYPE_FORMULA:cellValue="";System.out.print("FORMULA:");break;default:break;}return cellValue;}private String getDateCellValue(Cell cell){String cellValue = "" ;if(cell!=null){switch(cell.getCellType()){case  Cell.CELL_TYPE_NUMERIC:if (HSSFDateUtil.isCellDateFormatted(cell)) {  double d = cell.getNumericCellValue();  Date date = HSSFDateUtil.getJavaDate(d); SimpleDateFormat dformat=new SimpleDateFormat("yyyy-MM-dd");cellValue=dformat.format(date);}else{NumberFormat nf = NumberFormat.getInstance();nf.setGroupingUsed(false);//true时的格式:1,234,567,890nf.setMaximumFractionDigits(9); //设置数值的小数部分允许的最大位数。 cellValue= nf.format(cell.getNumericCellValue());//数值类型的数据为double,所以需要转换一下}break;case Cell.CELL_TYPE_STRING:cellValue=StringUtils.trim(cell.getStringCellValue());break;case Cell.CELL_TYPE_BOOLEAN:cellValue=String.valueOf(cell.getBooleanCellValue());break;case Cell.CELL_TYPE_FORMULA:cellValue=getDateCellValue(evaluator.evaluate(cell));break;default:cellValue="";break;}}return cellValue ;}private static String getDateCellValue(CellValue cell) {String cellValue = null;switch (cell.getCellType()) {case Cell.CELL_TYPE_STRING:System.out.print("String :");cellValue=cell.getStringValue();break;case Cell.CELL_TYPE_BOOLEAN:cellValue=String.valueOf(cell.getBooleanValue());break;case Cell.CELL_TYPE_NUMERIC:System.out.print("NUMERIC:");double d = cell.getNumberValue();  Date date = HSSFDateUtil.getJavaDate(d); SimpleDateFormat dformat=new SimpleDateFormat("yyyy-MM-dd");cellValue=dformat.format(date);break;case Cell.CELL_TYPE_FORMULA:cellValue="";System.out.print("FORMULA:");break;default:break;}return cellValue;}//以上几个方法是为了解析数据类型,下面开始解析数据,团员注册登记表void analyzeXstjTyxxbyTygxzcb(Workbook workbook){this.evaluator = workbook.getCreationHelper().createFormulaEvaluator(); System.out.println("开始解析 Sheet 团员注册登记表");Sheet sheet;sheet = workbook.getSheet("团员注册登记表");//用户提供的数据必须验证按照模版的列顺序,不可调整列顺序int startRowNum = 1; //开始读取数据的行数int lastRowNum = sheet.getLastRowNum();//获取配置的读取结束的行数//遍历rowfor(;startRowNum<=lastRowNum;startRowNum++){System.out.println("---------start---row"+startRowNum+"-------------");Row hssfrow = sheet.getRow(startRowNum);if(startRowNum%100==0){Timestamp ts1 = new Timestamp(System.currentTimeMillis());System.out.println(ts1+" --- "+startRowNum);}Cell cellXH = hssfrow.getCell(5);//学号String xh = getCellValue(cellXH);DetachedCriteria tyxxdc = DetachedCriteria.forClass(XstjTqtjTyxx.class);tyxxdc.add(Restrictions.eq("xh", xh));List<XstjTqtjTyxx> tyxxdcList = commonDao.findListByCriteria(tyxxdc, -1, -1);XstjTqtjTyxx tyxx;if(tyxxdcList.size()>0){tyxx=tyxxdcList.get(0);}else{tyxx = new XstjTqtjTyxx();}tyxx.setXh(xh);tyxx.setZt("0");tyxx.setRtdw("XX大学");Cell cellEJZZ = hssfrow.getCell(1);//二级组织名称String ejtzzmc = getCellValue(cellEJZZ);tyxx.setEjtzzmc(ejtzzmc);DetachedCriteria dcbm = DetachedCriteria.forClass(XstjTqtjTzz.class);dcbm.add(Restrictions.eq("zzmc", ejtzzmc));List<XstjTqtjTzz> bmList = commonDao.findListByCriteria(dcbm, -1, -1);XstjTqtjTzz tzz = bmList.get(0);if(tzz==null) {System.out.println("二级组织名称不存在 =="+ejtzzmc);}tyxx.setEjtzzid(tzz.getUnid());Cell cellTZBMC = hssfrow.getCell(2);//团支部名称String tzbmc = getCellValue(cellTZBMC);tyxx.setTzbmc(tzbmc);DetachedCriteria tzbmcdc = DetachedCriteria.forClass(XstjTqtjTzz.class);tzbmcdc.add(Restrictions.eq("zzmc", tzbmc));List<XstjTqtjTzz> tzbmcList = commonDao.findListByCriteria(tzbmcdc, -1, -1);XstjTqtjTzz tzzt = tzbmcList.get(0);if(tzzt==null) {System.out.println("团支部名称不存在 =="+tzbmc);}tyxx.setTzzbh(tzzt.getUnid());Cell cellTYBH = hssfrow.getCell(3);//团员编号String tybh = getCellValue(cellTYBH);tyxx.setTybh(tybh);Cell cellXM = hssfrow.getCell(4);//姓名String xm = getCellValue(cellXM);tyxx.setXm(xm);//根据学号获得学生信息DetachedCriteria xsxxdc = DetachedCriteria.forClass(XsxxJbxx.class);xsxxdc.add(Restrictions.eq("xsxh", xh));List<XsxxJbxx> xsxxdcList = commonDao.findListByCriteria(xsxxdc, -1, -1);if(xsxxdcList.size()>0){XsxxJbxx xsxx=xsxxdcList.get(0);tyxx.setSfzh(xsxx.getZjhm());tyxx.setNj(xsxx.getNj());tyxx.setXb(xsxx.getXsxb());tyxx.setYxdm(xsxx.getYx());tyxx.setZydm(xsxx.getZy());tyxx.setBjdm(xsxx.getBj());DetachedCriteria yxmcdc = DetachedCriteria.forClass(JcsjYxxx.class);yxmcdc.add(Restrictions.eq("yxdm", xsxx.getYx()));List<JcsjYxxx> yxmcdcList = commonDao.findListByCriteria(yxmcdc, -1, -1);if(yxmcdcList.size()>0){JcsjYxxx yxxx=yxmcdcList.get(0);tyxx.setYxmc(yxxx.getYxmc());}DetachedCriteria zymcdc = DetachedCriteria.forClass(JcsjZyxx.class);zymcdc.add(Restrictions.eq("zydm", xsxx.getZy()));List<JcsjZyxx> zymcdcList = commonDao.findListByCriteria(zymcdc, -1, -1);if(zymcdcList.size()>0){JcsjZyxx zyxx=zymcdcList.get(0);tyxx.setZymc(zyxx.getZymc());}DetachedCriteria bjmcdc = DetachedCriteria.forClass(JcsjBjxx.class);bjmcdc.add(Restrictions.eq("bjdm", xsxx.getBj()));List<JcsjBjxx> bjmcdcList = commonDao.findListByCriteria(bjmcdc, -1, -1);if(bjmcdcList.size()>0){JcsjBjxx bjxx=bjmcdcList.get(0);tyxx.setBjmc(bjxx.getBjmc());}}SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Cell cellks = hssfrow.getCell(6);//入团日期String kssj = getCellValue(cellks);try {if(StringUtils.isNotBlank(kssj)) {Date dateks =sdf.parse(kssj);tyxx.setRtsj(new Timestamp(dateks.getTime()));}commonDao.saveOrUpdate(tyxx);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("---------end---row"+startRowNum+"-------------");}}}

通用Excel数据导入功能模板相关推荐

  1. matlab导入word数据,如何将Excel数据导入MATLAB中?/excel数据导入word模板

    如何将Excel数据导入MATLAB中? 从excel中导入,可以用xlsread()函数. 例如: A=xlsread('C:\Users\Administrator\Desktop\07-29预. ...

  2. node实现接口资源批量管理(含excel数据导入及模板下载)

    概述 该功能是基于BSPV1.0版本中资源管理的扩展,在资源管理中添加接口资源,方便在对角色授权时做到更加精确的控制.第一层级为系统,第二层级为系统模块,第三层级为接口 UI图 [外链图片转存失败,源 ...

  3. 使用EasyExcel实现模板下载、数据导入功能

    这里是在springboot项目下使用EasyExcel实现模板下载.数据导入功能. 顺便记录下自己遇到的一些坑. 一.模板下载 1.在你的工程下添加模板文件 2.编写代码实现下载功能 control ...

  4. 效率最高的Excel数据导入续---SSIS Package包制作图解全过程

    目的:本文主要是详细讲解SSIS Package包的制作过程 本人买过的一张盗版windows 2003操作系统光盘上,上面自带有很详细的图文介绍,也就是傻瓜版的系统安装图解.因此,本文打算也是采用那 ...

  5. linq 清除一条数据中的某个字段值_B端通用批量数据导入方案设计

    点击上方蓝色字体,关注我 B端通用批量数据导入方案设计 文 | 3548字 估计阅读 | 9分钟 引题 B端产品经常遇到大量数据录入的需求.如春季招聘完成后,给新招的120个员工建立员工档案,并创建员 ...

  6. java自定义注解实现excel数据导入导出,设置单元格数据验证与生成省市区多列联动效果

    本文通过自定义注解实现excel数据导入导出.以及设置excel文件中列数据验证,即用户在excel文件中输入数据时就可以对数据格式验证是否符合,节省了程序中过多的数据验证操作,注解还额外提供了一系列 ...

  7. Excel 数据导入SQL XML 自动生成表头

    去出差的时候应客户要求要要将Excel 文件内的数据批量导入到数据库中,而且有各种不同种类的表格,如果每一个表格多对应一个数据表的话, 按照正常的方法应该是创建数据表,创建数据库中映射的数据模型,然后 ...

  8. c#直接调用ssis包实现Sql Server的数据导入功能

    调用ssis包实现Sql Server的数据导入功能网上已经有很多人讨论过,自己参考后也动手实现了一下,上一次笔者的项目中还用了一下这个功能.思前想后,决定还是贴一下增强记忆,高手请54. 1.直接调 ...

  9. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...

     本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较    (三)SSIS的简介    (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介 ...

最新文章

  1. CentOS下启动oracle数据库(转)
  2. 自定义hive url parse函数
  3. Android 上下文菜单(Context Menu)
  4. 覆盖所有面试知识点,持续更新中
  5. 【Redis】Redis 替代方案
  6. linux不编译设备树,petalinux 编译时报设备树语义错误
  7. Java面试-重写和重载的规则
  8. html引用less文件报错,vue-cli import less文件报错
  9. 网页游戏打击感实施要点
  10. mac的python怎么打中文空格_中英文排版空格问题解决方案
  11. Launcher 记录自定义桌面
  12. 兄弟Brother PT-9200DX 驱动
  13. ABAP 金额内外部转换函数
  14. [深度学习]Part1 Python学习进阶Ch24图像处理OpenCV(24.1~24.13)——【DeepBlue学习笔记】
  15. 用Python助女神发朋友圈
  16. 操作系统的类型与结构---定义与分类
  17. 计算机 志愿活动总结,计算机及信息科学系青年志愿者协会活动总结计划.docx
  18. 护眼宝_双显示屏_失效_win10护眼宝失效_护眼宝不能调节
  19. 腾讯|阿里|百度|字节跳动人才体系的职位层级、薪酬、晋升标准
  20. 程序员跳槽一般涨薪多少合适?最高160%倍还有一位网友扎心了

热门文章

  1. 9小时突破1000亿,你以为这就是阿里双十一的最大胜利?
  2. STM32CubeMX 下载和安装 详细教程
  3. Liip-imagine-bundle 在 Nignx 无法生成缓存图的问题
  4. Js 日期转化大写中文 实现代码
  5. 电商APP首页楼层架构设计详解
  6. 通过CrossTalk在Delphi中使用ADO.Net(1)
  7. 深度学习半自动标注_时下流行的深度学习数据标注工具
  8. ant-select组件页面下滑时下拉框漂浮
  9. properties文件
  10. kubernetes集群搭建Zabbix监控平台