精华内容
下载资源
问答
  • 9999))+title document.save(title+’.docx’) excel = xlrd.open_workbook(‘地标号.xlsx’) table = excel.sheet_by_index(0) nows = table.nrows for i in range(nows): title = table.cell(i, 2).value type1 = ...

    一、需要扩展库

    需要提前安装第三方库,分别为:python-docx,xlrd。
    在运行中输入 cmd 进入命令控制
    安装方法:pip install python-docx
    pip install xlrd
    输入pip list,查看是否安装成功在这里插入图片描述

    ``
    from docx import Document
    import xlrd
    import random

    def change_data(title, type1, num):
    document = Document(‘地标号.docx’)
    for i in document.paragraphs:
    i.text = i.text.replace(‘xxx’, title)
    i.text = i.text.replace(‘x00’, type1)
    i.text = i.text.replace(‘x11’, num)
    title = str(random.randint(1,9999))+title
    document.save(title+’.docx’)

    excel = xlrd.open_workbook(‘地标号.xlsx’)
    table = excel.sheet_by_index(0)
    nows = table.nrows

    for i in range(nows):
    title = table.cell(i, 2).value
    type1 = str(table.cell(i, 7).value)
    num = str(int(table.cell(i, 8).value))
    change_data(title, type1, num)

    
    
    展开全文
  • }else if(flag == "500"){ $.messager.alert("提示","该excel表中姓名为:"+JSON.parse(msg).err+"的人员工号重复!"); searchPerson(); }else{ $.messager.alert(...

    jsp (<%@ include file="/js/extends/jquery.form.js" %>)

    <div id="uploadDiv">
    	<form id="uploadForm" enctype="multipart/form-data">
    		<input id="departmentIdImp" name="departmentIdImp" type="hidden" />
    		<input id="departmentNameImp" name="departmentNameImp" type="hidden" />
    		<table class="inputTable">
    			<caption id="uploadDivOrgName"></caption>			
    			<tr>
    				<td class="staticTdNW" style="width: 20%;">附件:</td>
    				<td class="dynamicNW" style="width: 80%;">
    	                <input id="templateFile" name="templateFile" />
    				</td>
    			</tr>
    		</table>
    	</form>
    </div>
    

    js

    $("#uploadForm").ajaxSubmit({//此方法使用需要单独引用/js/extends/jquery.form.js
    		type: 'post', // 提交方式 get/post
            url: "<c:url value='/hrPerson/saveFile' />", // 需要提交的 url						      
    		datatype: "json",
    	    success: function(msg){						            	
    				 var flag = "500";
    				 						try{
    						            		if(JSON.parse(msg).state=="200"){
    						            			flag = "200";
    						            		}else if(JSON.parse(msg).state=="500" && JSON.parse(msg).err!=""){
    						            			flag = "500";
    						            		}else{
    						            			flag = "600";
    						            		}
    						            	}catch(e){
    						            		flag = "600";
    						            	}
    						            	if(flag == "200"){
    						            		$.messager.alert("提示","导入成功");
    						            		searchPerson();
    						            		$("#uploadDiv").dialog('close');
    						            	}else if(flag == "500"){
    						            		$.messager.alert("提示","该excel表中姓名为:"+JSON.parse(msg).err+"的人员工号重复!");
    						            		searchPerson();
    						            	}else{
    						            		$.messager.alert("提示","导入失败");
    						            	}
    									   }
    						        });
    

    controller

        @RequestMapping(value = "/hrPerson/saveFile", method = RequestMethod.POST)
    	@ResponseBody
    	public void saveFile(HttpServletResponse response, HttpServletRequest request, String departmentIdImp, String departmentNameImp){
    		Map<String,Object> map = new HashMap<String,Object>();
    		try {
    			UserInfoEx userInfoEx = (UserInfoEx) request.getSession().getAttribute(UserInfoEx.USERINFO_EX);
    			List<SynUserManagement> sumList = new ArrayList<SynUserManagement>();
    			MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    			MultipartFile templateFile = multipartRequest.getFile("templateFile");
    			XSSFWorkbook work = new XSSFWorkbook(templateFile.getInputStream());// 得到这个excel表格对象
    			XSSFSheet sheet = work.getSheetAt(0); // 得到第一个sheet
    			int rowNo = sheet.getPhysicalNumberOfRows(); // 得到行数
    			//工号重复人员名单
    			String workNumberIsThereName = "";
    			for(int i=1; i<rowNo; i++){
    				if(sheet.getRow(i)!=null){
    					XSSFRow row = sheet.getRow(i);
    					SynUserManagement sum = new SynUserManagement();
    					int j = 0;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setWorkNumber(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setTheName(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setPositions(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setJobs(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setSex(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setIdNumber(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_NUMERIC);
    					sum.setDateOfBirth(row.getCell(j).getDateCellValue());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setAge(row.getCell(j).getStringCellValue().trim().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setPoliticalLandscape(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setTheTitle(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_NUMERIC);
    					sum.setTheTitleTime(row.getCell(j).getDateCellValue());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setTitleProfessional(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setQualificationCertificate(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setNationals(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setNativePlace(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setRegisteredResidence(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_NUMERIC);
    					sum.setWorkingHours(row.getCell(j).getDateCellValue());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setLengthService(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_NUMERIC);
    					sum.setInTheTime(row.getCell(j).getDateCellValue());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setFullTimeInstitutions(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setRecordFormalSchool(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setProfessional(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setHeightRecordFormalSchool(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setHighestEducaInstitution(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setHighestDegreeMajor(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setOriginalWorkUnit(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setOwuDepartment(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setOwuJobs(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setFileInto(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_NUMERIC);
    					sum.setTermOfLaborContract(row.getCell(j).getDateCellValue());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setNumLaborContractsSigned(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_NUMERIC);
    					sum.setStimeLaborContract(row.getCell(j).getDateCellValue());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_NUMERIC);
    					sum.setEtimeLaborContract(row.getCell(j).getDateCellValue());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setMaritalStatus(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setHomeAddress(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setContactPhoneNumber(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setHousingFundAccount(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setBasePay(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setSpouseName(row.getCell(j).getStringCellValue().trim());
    					j++;
    					row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    					sum.setSpouseUnit(row.getCell(j).getStringCellValue().trim());				
    					
    					sum.setFounder(userInfoEx.getUserInfo().getName());
    					sum.setFounderUuid(userInfoEx.getUserInfo().getPersonUuid());
    					sum.setCreationTime(new Date());
    					sum.setDepartmentId(departmentIdImp);
    					sum.setDepartment(departmentNameImp);
    					sum.setDeleteState("1");
    					sum.setId(StringUtil.getUUID());
    					
    					if(synUserManagementService.workNumberIsNotThere(sum)){
    						workNumberIsThereName+=sum.getTheName()+",";
    					}else{
    						sumList.add(sum);
    					}	
    				}else{
    					continue;
    				}
    			}
    			int j = 0;
    			String err = "";
    			for(SynUserManagement sum : sumList){
    				if(synUserManagementService.insterUserObject(sum)==1){
    					j++;					
    				}
    			}
    			if(j==rowNo-1){
    				map.put("state", "200");
    			}else{
    				map.put("state", "500");
    				if(workNumberIsThereName!=""){
    					map.put("err", workNumberIsThereName);
    				}else{
    					map.put("err", "");
    				}
    			}
    		} catch (Exception e) {
    			LogUtil.errorLog(e);
    			map.put("state", "500");
    			map.put("err", "");
    		}		
    		JSONObject retVal = new JSONObject(map);
    		try {
    			response.getWriter().write(retVal.toString());
    		} catch (IOException e) {
    			LogUtil.errorLog(e);
    		}
    	} 
    
    展开全文
  • excel模板批量导入数据

    千次阅读 2017-12-13 11:53:14
    ssh框架 前端 easyUI封装后的框架  文件上传 ajaxfileupload框架 Dto和实体、Dao方法省略 前端页面 pageEncoding="UTF-8"%> style="width: 50%"> ...onstart="beforeResourceSave()" value="导入" ico

    ssh框架

    前端 easyUI封装后的框架   

    文件上传 ajaxfileupload框架

    Dto和实体、Dao方法省略


    前端页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="gk" uri="http://***/tags/core"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

    <html>
    <head>
    </head>
    <body>
    <script src="/js/ajaxfileupload.js"></script>

    <form method="post" enctype="multipart/form-data">
    <div style="margin: 50px 50px 15px 180px">
    <input id="uploadExcel" type="text" name="uploadExcel"
    style="width: 50%">
    </div>
    <!-- ******  以下生成页面按钮  ****** -->

    <button id="save" action="ajaxrequest"
    onstart="beforeResourceSave()" value="导入" iconCls="gk-save"
    validate="true" />

    <script type="text/javascript">
    jQuery("#uploadExcel").filebox({
    buttonText: '选择文件', 
        buttonAlign: 'left' 
    })
    function beforeResourceSave(){
    var fileName = jQuery("input[name=uploadExcel]")[0].files[0];
    var fileid= jQuery("input[name='uploadExcel']").attr("id");
                     //进行基本校验  
                     if(fileName==undefined){     
                    jQuery.messager.alert('提示','请选择上传文件!!','info');   
                     }else{  
                    //对文件格式进行校验  
                    var index = fileName.name.lastIndexOf(".");
                    var ext = fileName.name.substring(index + 1,fileName.name.length);
                      //设置显示配置
                     var messageOpts = {
                      "closeButton" : true,//是否显示关闭按钮
                      "debug" : false,//是否使用debug模式
                      "positionClass" : "toast-center-center",//弹出窗的位置
                      "onclick" : null,
                      "showDuration" : "300",//显示的动画时间
                      "hideDuration" : "1000",//消失的动画时间
                      "timeOut" : "5000",//展现时间
                      "extendedTimeOut" : "1000",//加长展示时间
                      "showEasing" : "swing",//显示时的动画缓冲方式
                      "hideEasing" : "linear",//消失时的动画缓冲方式
                      "showMethod" : "fadeIn",//显示时的动画方式
                      "hideMethod" : "fadeOut" //消失时的动画方式
                      };
                      toastr.options = messageOpts;
                        if(ext=="xls"||ext=="xlsx"){ 
                        jQuery.ajaxFileUpload({  
                                 url: "/contr/saveExcel.do",   
                                 type: 'post',  
                                 secureuri: false,   
                                 fileElementId: fileid,  
                                 dataType: 'json',   
                                 success: function(date){    
                                     if(date.success){
                                    toastr.success("保存成功");
                                     }else{
                                    toastr.error("保存失败");
                                     }
                                 }  
                             });  
                        }else{  
                        jQuery.messager.alert('提示','请选择Excel文件!','info');   
                        jQuery('#uploadExcel').filebox('setValue','');
                        }  
                     }    
    }
    </script>
    </form>
    </body>
    </html>



    Controller代码:


    @Controller
    @RequestMapping("contr")
    public class Controller { 

    @Autowired
    private  ssService  ssService;


    /**
    * 导入Excel表格
    *  @return
    */
    @RequestMapping("saveExcel.do")
    @ResponseBody
        public String saveExcel(final JsonModel jm,final MultipartHttpServletRequest request,final HttpServletResponse response)  { 

    //获取上传的文件
    MultipartFile multipartFile = request.getFile("uploadExcel");
    String filename = multipartFile.getOriginalFilename();
    System.out.println(filename);
    long size=multipartFile.getSize();
            if(filename==null || ("").equals(filename) && size==0) { 
            throw new AppException("请选择excel文件"); 
            }
             //处理Excel读取数据         参数:文件名,Excel文件
            List<Dto> dtoList = this.ssService.excelService(filename,multipartFile); 
             if(DtoList!=null){
    for(Dto dto:dtoList) {

    this.ssService.save(dto);

    }
             }else{
            JsonModel model = new JsonModel();
            model.setSuccess(false);
            model.setErrorMessage("excel数据保存失败");
            return model.toJSON();
             }
             System.out.println(jm.toJSON());
             return jm.toJSON();
    }


    Service接口:

    public interface ssService extends BaseService{

    /**
    * 读取导入的excel文件
    * @param filename
    * @param multipartFile
    * @return
    */
    List<Dto> excelService(String filename,MultipartFile multipartFile);

    /**保存

    * @param

    */
    void save(Dto  dto);


    }


    Service实现类

    @Service
    public class ssServiceImpl extends BaseServiceImpl implements ssService {

    @Autowired
    private DtoDao dtoDao;

    public void save(Dto  dto){

    dtoDao.save(dto);//调用Dao方法保存

    }

    public  List<Dto> excelService(String filename,MultipartFile multipartFile){

    //创建处理EXCEL
            ReadExcel readExcel=new ReadExcel();
            //解析excel,获取信息集合        
            List<Dto>
    dtoList;
    try {
    dtoList = readExcel.getExcelInfo(filename ,multipartFile);
    } catch (Exception e) {
    throw new AppException("导入excel失败");
    }
            if(!DtoList.isEmpty()){
            return dtoList;
            }
            return null;

    }

    }



    处理EXCEL类


    public class ReadExcel {
    //总行数
        private int totalRows = 0;  
        //总条数
        private int totalCells = 0; 
        //错误信息接收器
        private String errorMsg;
        //构造方法
        public ReadExcel(){}
        //获取总行数
        public int getTotalRows()  { return totalRows;} 
        //获取总列数
        public int getTotalCells() {  return totalCells;} 
        //获取错误信息
        public String getErrorInfo() { return errorMsg; }  
        
      /**
       * 验证EXCEL文件
       * @param filePath
       * @return
       */
      public boolean validateExcel(String filePath){
      if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))){  
              throw new AppException("文件名不是Excel格式");  
          }  
          return true;
      }

      /**
       * 读EXCEL文件,获取信息集合
       * @param fielName
       * @return
       */
      public ListDto> getExcelInfo(String fileName,MultipartFile Mfile) throws Exception{
      //把spring文件上传的MultipartFile转换成CommonsMultipartFile类型
          CommonsMultipartFile cf= (CommonsMultipartFile)Mfile; 
          
          //获取本地存储路径
          String path="";
          String path1 = System.getProperties().getProperty("user.dir");//用户的当前工作目录
      String path2 = System.getProperties().getProperty("java.io.tmpdir");//默认的临时文件路径
      if(path2!=null) {
      path = path2;
      }else {
      path = path1;
      }
      System.out.println("path2::::"+path2);
          File file = new  File(path);
          //创建一个目录 (它的路径名由当前 File 对象指定,包括任一必须的父路径。)
          if (!file.exists()) file.mkdirs();
          String name1 = path + new Date().getTime() + ".xlsx";
          System.out.println("name1:::"+name1);
          //新建一个文件
          File file1 = new File(name1); 
          //将上传的文件写入新建的文件中
          try {
              cf.getFileItem().write(file1); 
          } catch (Exception e) {
              e.printStackTrace();
          }
          //初始化信息的集合    
          List<Dto> dtoList=new ArrayList<Dto>();
          //初始化输入流
          InputStream is = null;  
          try{
             //验证文件名是否合格
             if(!validateExcel(fileName)){
                 return null;
             }
             //根据文件名判断文件是2003版本还是2007版本
             boolean isExcel2003 = true; 
             if(isExcel2007(fileName)){
                 isExcel2003 = false;  
             }
             //根据新建的文件实例化输入流
             is = new FileInputStream(file1);
             //根据excel里面的内容读取信息
             dtoList = getExcelInfo(is, isExcel2003); 
             is.close();
             
             // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
             if (file1.exists() && file1.isFile()) {
                 if (file1.delete()) {
                     System.out.println("删除单个文件" + name1 + "成功!");
                 } else {
                     System.out.println("删除单个文件" + name1 + "失败!");
                 }
             } else {
                 System.out.println("删除单个文件失败:" + name1 + "不存在!");
             }
         }catch(Exception e){
             e.printStackTrace();
         } finally{
             if(is !=null)
             {
                 try{
                     is.close();
                 }catch(IOException e){
                     is = null;    
                     e.printStackTrace();  
                 }
             }
         } 
      
      return D104DtoList;
      }
      /**
       * 根据excel里面的内容读取客户信息
       * @param is 输入流
       * @param isExcel2003 excel是2003还是2007版本
       * @return
       * @throws IOException
       */
      public  List<Dto> getExcelInfo(InputStream is,boolean isExcel2003){
           List<Dto> dtoList=null;
           try{
               /** 根据版本选择创建Workbook的方式 */
               Workbook wb = null;
               //当excel是2003时
               if(isExcel2003){
                   wb = new HSSFWorkbook(is); 
               }
               else{//当excel是2007时
                   wb = new XSSFWorkbook(is); 
               }
               //读取Excel里面客户的信息
               dtoList=readExcelValue(wb);
           }
           catch (IOException e)  {  
               e.printStackTrace();  
           }  
           return dtoList;
      }   

      /**
       * 读取Excel里面客户的信息
       * @param wb
       * @return
       */
      private List<Dto> readExcelValue(Workbook wb){ 
          //得到第一个shell  
           Sheet sheet=wb.getSheetAt(0);
           
          //得到Excel的行数
           this.totalRows=sheet.getPhysicalNumberOfRows();
           
          //得到Excel的列数(前提是有行数)
           if(totalRows>=1 && sheet.getRow(0) != null){
                this.totalCells=sheet.getRow(0).getPhysicalNumberOfCells();
           }
           
           List<Dto> dtoList=new ArrayList<Dto>();
           Dto dto;            
          //循环Excel行数,从第二行开始 标题不入库
           for(int r=1;r<totalRows;r++){
               Row row = sheet.getRow(r);
               if (row == null) 
               continue;
             dto = new Dto();
               //循环Excel的列
               for(int c = 0; c <this.totalCells; c++){    
                   Cell cell = row.getCell(c);
                   if (null != cell){
                       if(c==0){//读取格子
                       dto.setDto01(cell.getStringCellValue());//名称
                       }else if(c==1){
                       dto.setDto02(cell.getStringCellValue());//简称
                       }else if(c==2){
                       if(cell!=null) {
                       cell.setCellType(Cell.CELL_TYPE_STRING);   //Excel 中 number类型数据要先转为String类型在读取
                       dto.setDto03(cell.getStringCellValue());//编号
                       }
                       }else if(c==3){
                       dto.setDto04(cell.getStringCellValue());//地址
                       }else if(c==4){
                       dto.setDto05(cell.getStringCellValue());//负责人
                       }
                       }
                   }
               }
                //添加
                dtoList.add(dto);
           }
           return dtoList;
      }
      
      
      
      
      
      


      // @描述:是否是2003的excel,返回true是2003 
      public static boolean isExcel2003(String filePath)  {  
           return filePath.matches("^.+\\.(?i)(xls)$");  
       }  
     
      //@描述:是否是2007的excel,返回true是2007 
      public static boolean isExcel2007(String filePath)  {  
           return filePath.matches("^.+\\.(?i)(xlsx)$");  
       } 
























    展开全文
  • 通过excel模板批量导入数据实现过程总结编辑本段回目录 做项目期间做到一个需求是用excel批量导入计本信息,刚开始接到这个需求头脑一片空白,因为之前没做过,不过空白是空白但还是要做。 1.Excel批量导入的...

    通过excel模板批量导入数据实现过程总结编辑本段回目录

    做项目期间做到一个需求是用excel批量导入计本信息,刚开始接到这个需求头脑一片空白,因为之前没做过,不过空白是空白但还是要做。

    1.Excel批量导入的优势和劣势:

    优势:

    (1)系统在添加页面操作比较浪费时间,用导入可以增加系统的可用性;

    (2)操作简单;

    劣势:

    excel导入数据类型不好控制;如时间类型,参数类型等,模板设计;

    2.Excel批量导入需要的材料

    (1)提供Excel导入模板;

    (2)导入Excel Map映射机制;

    (3)Poi架包

    3Excel 批量导入注意事项

    (1)模板设置

    一些参数下拉列表的设置,如:证件类型、人员性别、政治面貌等,在界面上操作都是选择项,而在Excel模板中我们也要这样设置,以免用户在Excel里错误填写;

    操作步骤:

    1.选择要设置的单元格,譬如A1单元格;

    2.选择菜单栏的数据”→“有效性”→出现数据有效性弹出窗口;

    3.设置选项中→“有效性条件”→“允许中选择序列”→右边的忽略空值提供下拉菜单全部打勾来源下面输入数据,譬如“1,2,3,4,5,6,7,8,9”(不包括双引号,分割符号“,”必须为半角模式)→确定OK了,再次选择该A1单元格,就出现了下菜单。

    但是往往我们的数据库存的的代码而不是我们在外面选择的可以看到的值,我们在action后台获取模板里的值需要进行参数转换。这一转换在Excel导入功能中是必要的内容,在多种类型的参数转换中,我们可以定义一个Map缓存,用传进去的值去匹配map里的value值,再根据value值去匹配所需要的key值。

    (2)时间设置

    如果数据库所需要的时间类型为data类型,我们可以在模板上选中时  间的一列点击右键,设置单元格格式,选择一项为“yyyy-mm-dd”即可,然而开发人员所做的程序用户不一定那样操作,因为Excel里的时间格式会随着用户复制信息而改      变。目前本人在MAP映射机制里能够识别String类型和Data类型,所以我们就难以确定用户传的是Data类型还是String类型,这样就无形的增加开发人员的苦恼,首先我们要在时间列里注明我们系统支持的时间格式。最佳实践方式为:在时间列标注时间格式;模板设置为文本格式;用户可以在时间列中以文本格式填写“yyyy-mm-dd”、"yyyymmdd""yyyy.mm.dd""yyyy/mm/dd"四种样式,然后在后台进行时间段截取   我们数据库需要的类型。

    在一次导入的过程中,有时也会有失败的情况,所以我们在导入的过程中也需要回导入之前的结果,可以增加用户的可用性。

    对于开发人员来说,不仅能够正确的理解需求并开发程序,我们还需要站在用户的角度去考虑我们开发的系统可用性,更方便用户去操作系统办理相关业务。

    展开全文
  • php的excel数据批量导入

    千次阅读 2016-04-03 15:43:54
    工作中常常有批量导入数据的需求,方法太多,掌握一个简单实用的足够了.下面为大家介绍一个好用的方法. 数据导入必须按照指定的格式系统方能识别,因此可两个大的步骤:一.导入模板下载 二.数据导入 一.模板下载 ...
  • 3.导入,选择csv格式的文件,将之前准备好的数据导入进来,注意导入模板一定要按照表结构去填写数据,且第一列填写序号,必填字段不能为空; 导入需要导入的文件即可; 很简单~~~亲测有效; ...
  • 读取Excel表格批量导入题目(有种做法是前端请求后端接口,后端接口会返回相应的模板文件,然后前端在模板文件里面写好数据,把模板文件post给接口,接口读取文件返回读取的数据给前端,其实就是把读取Excel表格的...
  • <button class="layui-btn btn-export margintop-16" id="btn_export" style=...模板导出 </button> <div class="file-upload" id="handleXls" style="float: left;line-height: 51.4px;"> <!
  • 以学生信息为例,将Excel模板信息配置在XML文件中,通过POI实现对excel文件读取操作,然后将读取的数据插入数据库中。具体思路是将模板信息配置在xml中,在项目启动时,通过spring实话,将xml的配置信息读入缓存以备...
  • EXCEL批量导入数据MVC

    千次阅读 2017-10-16 18:00:54
    在MVC中实现EXCEL批量导入,注意模板列名必须与数据库的字段一一对应。
  • 概述 该功能是基于BSPV1.0版本中资源管理的扩展,在资源管理中添加接口资源,方便在对角色授权时做到更加精确的控制。...考虑到系统中资源有限,在设计表时系统、模块、接口全部存储同一数据表,通
  • 1.导入excel表格(批量导入) 如图,给id=83和id=84的老师导入工作时间。 导入的excel模板如下 注意导入excel表格时关于日期时间类的的数据要设置对应的格式。 后台接口 /** * 导入老师时间 * @param file * @...
  • 在页面中,凡是有表格的信息,那一定会涉及到表格的批量导入。把一个excel表中的信息导入到页面中,下面有两种方法实现这个功能。 第一种是需要后台提供的接口,把参数传给后台,后台返给表中的数据。 第二种是纯...
  • 上篇Excel动态生成模板,此篇将借用此模板进行Excel数据批量导入。 说明:由于数据库中部分数据储存的是编码或者Id,因此,这里就需要用到上篇中的全局数据,判断是否有数据,有数据直接使用,没有数据,再去...
  • 在Web项目开发过程中我们有批量导入数据的需求,使用Apache的poi是一种不错的选择。 导入架包 <!-- 导入数据 --> <dependencies> <!--spring data jpa 依赖--> <dependency> <...
  • returndata:每个人要求的数据格式不一样,这个需要根据你自己的数据来更新规则 #操作系统文件目录 import os #操作docx的模块 from docx import Document #操作excel文件模块 import pandas as pd from pandas ...
  • django后台数据批量导入 开发环境:win10+python3.6+django2.0 大致思路:客户端下载excel模板,按照模板填写数据,填写完之后上传,批量导入 为了确保数据能够上传成功,我们需要让客户端按照我们的格式来进行填写...
  • 多种方法实现Excel批量导入数据库

    万次阅读 热门讨论 2015-11-27 23:24:19
    Excel批量导入数据库是用到批量导入系统的一个难题,特别是需要批量导入Excel表比较复杂,或者这张Excel表需要多表插入的时候,批量导入就变得复杂起来。其实了解了批量导入的原理之后,批量导入也就不再复杂。 ...
  • 1.1 创建模板表头与数据库表字段一一对应,示例如下 1.2将模板放入项目中,如下图所示: 2.前端页面 2.1 使用超链接提供模板下载地址 1 <html lang="zh_CN" xmlns:th="http://www.thymeleaf.org" 2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 468
精华内容 187
关键字:

excel数据批量导入模板