一、Action代码
package com.xinghuo.jqfx.web.jqlr; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; /** * Exl导入 */ public class JqfxJqlrDtAction extends FileUploadAction { //省去一些不要的东西,只保留导入功能代码 private File excelFile; //前台传过来的文件 private String excelFileFileName; //前台传过来的文件名 /** * Excel导入 */ @SuppressWarnings("deprecation") public String daoRu(){ dicChange(); //字典项键值对集合 HSSFWorkbook workbook = findWorkbook(excelFile); //创建文件对象 if(workbook != null){ List<JqfxJqlrDt> jqfxJqlrDtlList = new ArrayList<JqfxJqlrDt>(); //对象集合 int beginRowIndex = 4; //从excel中第几行读取 int totalRows = 0; HSSFSheet sheet = workbook.getSheetAt(1); //读取第一个seet页的内容 totalRows = sheet.getLastRowNum(); //得到seet的总行数 for (int i = beginRowIndex; i <= totalRows; i++) { JqfxJqlrDt jqfxJqlrDt = new JqfxJqlrDt(); HSSFRow row = sheet.getRow(i); //得到行 if (row == null) { continue; } /* 读取表格数据 */ HSSFCell cell_xzqy = row.getCell((short) 1); HSSFCell cell_jjdwName = row.getCell((short) 2); HSSFCell cell_jqxz = row.getCell((short) 3); HSSFCell cell_jqlb = row.getCell((short) 4); //一下两列和成一个时间 HSSFCell cell_afTime = row.getCell((short) 5); HSSFCell cell_afDate = row.getCell((short) 6); HSSFCell cell_sacw = row.getCell((short) 7); HSSFCell cell_xl = row.getCell((short) 8); HSSFCell cell_ddmc = row.getCell((short) 9); HSSFCell cell_remark = row.getCell((short) 10); HSSFCell cell_jcjId = row.getCell((short) 11); /* 向对象中填充数据 */ String xzqhName = initHSSFCellToString(cell_xzqy); String xzqhId = map_xzqh.get(xzqhName); //根据Map集合键取值 if(xzqhId == null){ continue; } jqfxJqlrDt.setXzqhName(xzqhName); jqfxJqlrDt.setXzqhId(xzqhId); jqfxJqlrDt.setJjdwName(initHSSFCellToString(cell_jjdwName)); //警情性质 String jqxz = initHSSFCellToString(cell_jqxz); String jqxzId = map_jqxz.get(jqxz); if(jqxzId == null){ continue; } jqfxJqlrDt.setJqxz(jqxz); jqfxJqlrDt.setJqxzId(jqxzId); //警情类别 String jqlb = initHSSFCellToString(cell_jqlb); String jqlbId = map_jqlb.get(jqlb); if(jqlbId == null){ continue; } jqfxJqlrDt.setJqlb(jqlb); jqfxJqlrDt.setJqlbId(jqlbId); //案发时间 //如果案发日期格式正确则添加,不正确似数据无效,跳过该条数据 Date faDate = initHSSFCellToDate(cell_afTime,cell_afDate); if(faDate == null){ continue; }else{ jqfxJqlrDt.setAfTime(faDate); } jqfxJqlrDt.setSacw(initHSSFCellToString(cell_sacw)); jqfxJqlrDt.setXl(initHSSFCellToString(cell_xl)); //地铁线路 String xl = this.initHSSFCellToString(cell_xl); try { xl=xl.substring(0,xl.lastIndexOf(".")); } catch (StringIndexOutOfBoundsException e) { } String xlId = map_xl.get(xl); if(xlId == null){ continue; } jqfxJqlrDt.setXl(xl); jqfxJqlrDt.setXlId(xlId); jqfxJqlrDt.setDdmc(initHSSFCellToString(cell_ddmc)); jqfxJqlrDt.setRemark(initHSSFCellToString(cell_remark)); jqfxJqlrDt.setJcjId(initHSSFCellToString(cell_jcjId)); //导入时流程状态为1 jqfxJqlrDt.setDataFlowStatus("1"); jqfxJqlrDtlList.add(jqfxJqlrDt); } //保存警情信息 for (JqfxJqlrDt jqfxJqlrDt : jqfxJqlrDtlList) { //查询数据库中存不存在接警编号相同的数据 boolean boole = manager.getJqfxJqlrDtjjcbh(jqfxJqlrDt.getJcjId()); if(boole){ //存在接警编号相同的数据,则不插入数据 }else{ manager.saveJqfxJqlrDt(jqfxJqlrDt); } } message.setUrl("/jqlr/jqfxJqlrDt/jqfxJqlrDt!list.action"); message.setMessInfo("导入成功。"); } message.setType(Message.LOCATION_URL); return "message"; } /** * 得到excel文件 * @return */ public HSSFWorkbook findWorkbook(File file) { if(excelFileFileName.toLowerCase().endsWith(".xls")){ try { FileInputStream fileInputStream = new FileInputStream(file); //得到文件 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(fileInputStream); //将文件转换为excel格式 return hssfWorkbook; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }else{ message.setUrl("/jqlr/jqfxJqlrDt/jqfxJqlrDt!excelDaoRuXuanZe.action"); message.setMessInfo("导入失败,文件格式不对,请选择.xls文件。"); return null; } return null; } /** * 将表格格式转化为字符串 * @param cell * @author xiongmin */ private String initHSSFCellToString(HSSFCell cell) { String initCell = ""; if (cell != null) { initCell = cell.toString(); } return initCell; } /** * 将表格格式转化为时间类型 */ private Date initHSSFCellToDate(HSSFCell cell,HSSFCell cell2) { Date time = new Date(); SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String strTime = cell.toString() + " " + cell2.toString(); if (cell != null) { try { time = formatDate.parse(strTime); return time; } catch (ParseException e) { e.printStackTrace(); return null; } } return null; } /** * 得到格式化的系统时间 * @param date * @return */ public Date findDate(){ Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { date = dateFormat.parse(dateFormat.format(date)); } catch (ParseException e) { e.printStackTrace(); } return date; } //下面省去get/set方法 ...... }
二、页面代码
<%@ page contentType="text/html;charset=UTF-8"%> <%@ include file="/commons/taglibs.jsp"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>地铁-警情录入</title> <%@ include file="/commons/meta.jsp"%> <link rel="stylesheet" href="${ctx}/public/css/text.css" type="text/css"> <script language=javascript> //根据单选按钮选择导入情况 function daoRu(){ var obj = document.getElementsByName("excel"); for(var i = 0; i < obj.length; i++){ if(obj[i].checked){ document.form1.action= obj[i].value; } } document.form1.submit(); } </script> </head> <body> <form id="form1" name="form1" method="post" enctype="multipart/form-data"> <table width="98%" align="left" border="0" cellpadding="0" cellspacing="1" class="tabTest"> <tr> <td bgcolor="#eaf7ff" align="right" width="8%" height="28"> 请选择导入类型: </td> <td width="40%" bgcolor="#eaf7ff" align="left"> <input type="radio" name="excel" value="${ctx}/jqlr/jqfxJqlrDt/jqfxJqlrDt!daoRu.action" /> 地铁 <input type="radio" name="excel" value="${ctx}/jqlr/jqfxJqlrGj/jqfxJqlrGj!daoRu.action" /> 公交 </td> </tr> <tr> <td width="8%" height="31" bgcolor="#eaf7ff" align="right"> 请选择Execl文件: </td> <td width="40%" bgcolor="#eaf7ff" align="left"> <input type="file" name="excelFile" /> </td> </tr> <tr> <td bgcolor="#eaf7ff" align="left" colspan="2"> <input type="button" name="dr" value="导入" onclick="daoRu()" /> </td> </tr> </table> </form> </body> </html>