精华内容
下载资源
问答
  • web上传Excel

    2021-10-08 14:53:02
    上传文件 文件:
    <!doctype html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>上传文件</title>
      <script type="text/javascript" src='./xlsx.full.min.js'></script>
    </head>
    
    <body>
      文件:<br>
      <input type="file" id="file"><br>
    </body>
    <script>
      //首先监听input框的变动,选中一个新的文件会触发change事件
      document.querySelector("#file").addEventListener("change", function () {
        //获取到选中的文件
        var file = document.querySelector("#file").files[0];
        var type = file.name.split('.');
        if (type[type.length - 1] !== 'xlsx' && type[type.length - 1] !== 'xls') {
          alert('只能选择excel文件导入');
          return false;
        }
        const reader = new FileReader();
        reader.readAsBinaryString(file);
        reader.onload = (e) => {
          const data = e.target.result;
          const zzexcel = window.XLS.read(data, {
            type: 'binary'
          });
          const result = [];
          for (let i = 0; i < zzexcel.SheetNames.length; i++) {
            const newData = window.XLS.utils.sheet_to_json(zzexcel.Sheets[zzexcel.SheetNames[i]]);
            result.push(...newData)
          }
          console.log('result', result)
        }
      });
    </script>
    
    </html>
    
    展开全文
  • 一个Excel导入到数据库的Demo和一个winFrom的Excel的导入,简单好用。一个Excel导入到数据库的Demo和一个winFrom的Excel的导入,简单好用。一个Excel导入到数据库的Demo和一个winFrom的Excel的导入,简单好用。
  • javaweb上传下载excel实例
  • 代码是对Javaweb中Excel上传和下载的学习,开发工具用到Eclipse和MySQL。代码中sql文件是MySQL导出的数据文件,
  • 数据库在webcontent下的SQL文件夹中,excel模板在excelModel文件夹中,如果运行后不能正常出现页面,可以将压缩包内的jQuery-easyUI压缩包解压后将WebContent下的同名jQuery-easyUI文件替换。具体使用方法查看使用...
  • 最近写了一个基于poi解析excel文件的工具类,所以想在web项目中测试一下,就做了这个简单的项目。本项目主要使用了 SpringMVC+RESTful+Maven的风格。适合有一定基础的人员。 一、建立项目 首先,打开eclipse,...

    最近写了一个基于poi解析excel文件的工具类,所以想在web项目中测试一下,就做了这个简单的项目。本项目主要使用了
    SpringMVC+RESTful+Maven的风格。适合有一定基础的人员。

    源码地址Web项目,网页上传excel文件并解析实战示例

    一、建立项目

    首先,打开eclipse,新建一个动态项目。
    在这里插入图片描述

    对项目命名
    在这里插入图片描述
    然后一直Next直到finish

    在这里插入图片描述在这里插入图片描述

    建好项目后,选择项目右击,Configure>Convert to Maven Project,把项目转成maven项目。
    在这里插入图片描述在这里插入图片描述
    完成maven项目的转换后,打开pom.xml文件,加入maven依赖。如图:
    在这里插入图片描述

    <!-- poi -->
    	<dependency>
    		<groupId>org.apache.poi</groupId>
    		<artifactId>poi</artifactId>
    		<version>4.0.1</version>
    	</dependency>
    	<dependency>
    		<groupId>org.apache.poi</groupId>
    		<artifactId>poi-ooxml</artifactId>
    		<version>4.0.1</version>
    	</dependency>
    
        <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-core</artifactId>  
          <version>${org.springframework.version}</version>  
        </dependency>  
        <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-web</artifactId>  
          <version>${org.springframework.version}</version>  
        </dependency>
        <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-webmvc</artifactId>  
          <version>${org.springframework.version}</version>  
        </dependency>  
        
       	<!--  
       	<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值: 
    
        * compile,缺省值,适用于所有阶段,会随着项目一起发布。 
        * provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。 
        * runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。 
        * test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。 
        * system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
        -->
        
        <!-- 添加servlet依赖 -->
        <dependency>
    	  <groupId>javax.servlet</groupId>
    	  <artifactId>servlet-api</artifactId>
    	  <version>2.5</version>
    	  <scope>provided</scope>
    	</dependency>
    	
    	<!-- 文件上传  -->
    	<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    	<dependency>
    	  <groupId>commons-fileupload</groupId>
    	  <artifactId>commons-fileupload</artifactId>
    	  <version>1.4</version>
    	</dependency>
      
      </dependencies>
      <!-- 定义公共版本号 -->
      <properties>  
        <org.springframework.version>4.3.9.RELEASE</org.springframework.version>  
        <jersey.version>2.6</jersey.version>  
      </properties>
    

    接着打开web.xml进行配置。
    在这里插入图片描述

    <servlet>
        <servlet-name>spring-mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
         <!-- 初始化参数 --> 
        <init-param>
          <!-- 加载SpringMVC的xml到 spring的上下文容器中 -->  
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
      </servlet>
      
      <!-- 配置DispatcherServlet所需要拦截的 url -->  
      <servlet-mapping>
        <servlet-name>spring-mvc</servlet-name>
        <url-pattern>/rest/*</url-pattern>
      </servlet-mapping>
    

    然后按项目的结构新建包和java文件,结构如下:
    在这里插入图片描述下面是结构里每一个文件的内容。
    ExcelParseAction.java

    package com.excel.action;
    
    import java.io.InputStream;
    import java.math.BigDecimal;
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadBase;
    import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import com.excel.entity.Horizontal;
    import com.excel.entity.Vertical;
    import com.excel.util.ExcelParseMapper;
    import com.excel.util.ExcelParseMapper.ParseAllSheet;
    import com.excel.util.ExcelParseMapper.ParseSheetCell;
    
    import com.excel.util.FileUtil;
    
    @Controller
    @RequestMapping(value="/act")
    public class ExcelParseAction {
    
    	@RequestMapping(value="/parseExcel",method = RequestMethod.POST)//限定POST方法
    	public String parseExcel(HttpServletRequest request,ModelMap model){
    		ExcelParseMapper epm = new ExcelParseMapper();
    		try {
    			request.setCharacterEncoding("utf-8");
    			boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    			DiskFileItemFactory factory = new DiskFileItemFactory();//create a factory for disk-based file items
    			// 设置临时文件的存放路径
    //			factory.setRepository(new File("d:\\excel"));//不使用线程排队解析可不需要
    			factory.setSizeThreshold(2048);
    			ServletFileUpload upload = new ServletFileUpload(factory);//create a new file upload handler
    			//进度监听,可选
    //			upload.setProgressListener(new ProgressListener() {
    //				//pBytesRead:已读字节数
    //				//pContentLength:文件大小 字节总长度
    //				//pItems:FileItem 文件的索引
    //				public void update(long pBytesRead, long pContentLength, int pItems) {
    //					//XMLHttpServletRequest:js的对象
    //					//把pBytesRead/pContentLength*100,返回到界面上:XML或JSON(AJAX)
    //					System.out.println("已读" + pBytesRead + ",总大小:" + pContentLength + ",第几项:" + pItems + "!!!上传进度="
    //							+ (pBytesRead / pContentLength * 100) + "%");
    //					System.out.println(pBytesRead / pContentLength);
    //				}
    //			});
    			upload.setFileSizeMax(2*1024*1024);//设置上传的单个文件内容的大小限制(单位:字节)
    			upload.setSizeMax(4*1024*1024);//4M//设置整个表单上传内容的大小限制(单位:字节)
    			if(isMultipart){
    				List<FileItem> items = upload.parseRequest(request);
    				Iterator<FileItem> iter = items.iterator();
    				while(iter.hasNext()){
    					FileItem item = iter.next();
    					if(item.isFormField()){//如果是普通表单字段
    						String fileName=item.getFieldName();
    						String fileValue=item.getString("UTF-8");
    						System.out.println(fileName+"="+fileValue);
    					}else{//如果是文件字段
    						long size=item.getSize();//上传文件的大小
    						String fileName = item.getName();//文件名
    						System.out.println(fileName+":"+size);
    						if(fileName.endsWith("xlsx")||fileName.endsWith("xls")){
    							final int version;
    							version = fileName.endsWith("xlsx")?2007:2003;
    							InputStream in = item.getInputStream();// 文件内容的输入流
    							System.out.println("version:"+version);
    							final Map<String,Object> map = new HashMap<String,Object>();
    							final List<Horizontal> listH = new ArrayList<Horizontal>();
    							final List<Vertical> listV = new ArrayList<Vertical>();
    							epm.parseALLData(in, version,new ParseAllSheet() {
    								@Override
    								public void parseCurSheet(int version,Sheet sheet, String sheetName, int rowNum) {
    									// TODO Auto-generated method stub
    									int type = 0;
    									if(sheetName.equals("横向")) {
    										type = 0;
    									}else if(sheetName.equals("纵向")) {
    										type = 1;
    									}
    									System.out.println(sheetName+":"+rowNum);
    									epm.parseCurSheet(type,version ,sheet, rowNum,new ParseSheetCell() {
    										//可以进一步优化使解析类直接返回List<Object>
    										Horizontal h = new Horizontal();
    										Vertical v = new Vertical();
    										int indexNum = rowNum-1;
    										@Override
    										public void setCurCell(String title, int curRowNum, boolean isComplete,
    												String sheetName, Cell cell) {
    //											System.out.println(sheetName+"--"+title+"--"+curRowNum + "--" + epm.getFormartType(cell) + "--" + isComplete);
    											if(sheetName.equals("横向")) {
    												if(title.equals("编号")) {
    													v.setSerialNumber((String) epm.getFormartType(cell));
    												}else if(title.equals("名称")) {
    													v.setName((String) epm.getFormartType(cell));
    												}else if(title.equals("单位")) {
    													v.setUnit((String) epm.getFormartType(cell));
    												}else if(title.equals("消耗")) {
    													v.setLoss(new BigDecimal((String) epm.getFormartType(cell)));
    												}else if(title.equals("单价")) {
    													v.setPrice(new BigDecimal((String) epm.getFormartType(cell)));
    												}else if(title.equals("重量")) {
    													v.setWeight(new BigDecimal((String) epm.getFormartType(cell)));
    												} 
    												if(isComplete) {//行结束后装入List
    													listV.add(v);
    													v = new Vertical();
    												}
    											}else if(sheetName.equals("纵向")) {
    												if(title.equals("工作内容")) {
    													h.setWorkContent((String) epm.getFormartType(cell));
    												}else if(title.equals("编号")) {
    													h.setSerialNumber((String) epm.getFormartType(cell));
    												}else if(title.equals("名称")) {
    													h.setName((String) epm.getFormartType(cell));
    												}else if(title.equals("部门")) {
    													h.setDepartment((String) epm.getFormartType(cell));
    												}else if(title.equals("总负责人")) {
    													h.setAllHead((String) epm.getFormartType(cell));
    												}else if(title.equals("总负责人电话")) {
    													h.setAllHeadTel((String) epm.getFormartType(cell));
    												}else if(title.equals("地点")) {
    													h.setWorkspace((String) epm.getFormartType(cell));
    												}else if(title.equals("日期")) {
    													h.setCreateDate(dateToLong((String) epm.getFormartType(cell)));
    												}else if(title.equals("测试负责人")) {
    													h.setTestHead((String) epm.getFormartType(cell));
    												}else if(title.equals("测试负责人电话")) {
    													h.setTestHeadTel((String) epm.getFormartType(cell));
    												}else if(title.equals("测试方案")) {
    													h.setTestPlan((String) epm.getFormartType(cell));
    												}else if(title.equals("组织情况")) {
    													h.setSituation((String) epm.getFormartType(cell));
    												}else if(title.equals("气温")) {
    													String t = (String) epm.getFormartType(cell);
    													t = t.replace("度", "");
    													int tem = Integer.parseInt(t);
    													h.setTemperature(tem);
    												}else if(title.equals("天气")) {
    													h.setWeather((String) epm.getFormartType(cell));
    												}else if(title.equals("开始时间")) {
    													h.setStartTime(dateToLong((String) epm.getFormartType(cell)));
    												}else if(title.equals("结束时间")) {
    													h.setEndTime(dateToLong((String) epm.getFormartType(cell)));
    												}else if(title.equals("总用时")){
    													h.setTotalTime((String) epm.getFormartType(cell));
    												} 
    												if(curRowNum==indexNum) {//这个比较特殊,因为是纵向,所以最后一行才添加进list
    													listH.add(h);
    													h = new Horizontal();
    												}
    											}
    										}
    									});
    									if(sheetName.equals("横向")) {
    										map.put(sheetName, listV);
    									}else if(sheetName.equals("纵向")) {
    										map.put(sheetName, listH);
    									}
    								}
    							});
    							saveToFile(map);
    							model.addAttribute("message", "上传成功!");
    //							item.delete();// 删除临时文件
    						}
    					}
    				}
    			}
    		} catch (FileSizeLimitExceededException e) {
    			System.out.println("单个文件不能超过2M");
    		} catch (FileUploadBase.SizeLimitExceededException e) {
    			System.out.println("总文件大小不能超过4M");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return "parse";
    	}
    	
    	/**保存到文件,实际需要保存到数据
    	 * @param map
    	 */
    	@SuppressWarnings("unchecked")
    	private void saveToFile(Map<String, Object> map) {
    		FileUtil fu = new FileUtil();
    		List<Horizontal> listH = (List<Horizontal>) map.get("纵向");
    		List<Vertical> listV = (List<Vertical>) map.get("横向");
    		String path = "D:\\";
    		if(listH!=null) {
    			long name = new Date().getTime();
    			Horizontal h = listH.get(0);
    			//字符串写入到日志文件中
    			fu.writeContentToFile("工作内容:"+h.getWorkContent()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("编号:"+h.getSerialNumber()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("名称:"+h.getName()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("部门:"+h.getDepartment()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("总负责人:"+h.getAllHead()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("总负责人电话:"+h.getAllHeadTel()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("地点:"+h.getWorkspace()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("日期:"+h.getCreateDate()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("测试负责人:"+h.getTestHead()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("测试负责人电话:"+h.getTestHeadTel()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("测试方案:"+h.getTestPlan()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("组织情况:"+h.getSituation()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("气温:"+h.getTemperature()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("天气:"+h.getWeather()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("开始时间:"+h.getStartTime()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("结束时间:"+h.getEndTime()+"\r\n", path+name+".txt",true);
    			fu.writeContentToFile("总用时:"+h.getTotalTime()+"\r\n", path+name+".txt",true);
    		}
    		long name = new Date().getTime();
    		String str = "编号\t\t\t名称\t\t\t单位\t\t\t消耗\t\t\t单价\t\t\t重量";
    		fu.writeContentToFile(str+"\r\n", path+name+".txt",true);
    		
    		List<Vertical> sortList = sort(listV);
    		for(Vertical v:sortList) {
    			str = v.getSerialNumber()+"\t\t\t"+v.getName()+"\t\t\t"+v.getUnit()+"\t\t\t"+v.getLoss()+"\t\t\t"+v.getPrice()+"\t\t\t"+v.getWeight();
    			fu.writeContentToFile(str+"\r\n", path+name+".txt",true);
    		}
    		System.out.println("数据保存成功!");
    	}
    
    	/**日期转时间戳
    	 * @param date
    	 * @return
    	 */
    	public long dateToLong(String date) {
    		//MMM指的是中文,例如:2019-六月-05
    		DateFormat format = new SimpleDateFormat("yyyy-MMM-dd"); 
    		Long time = null;
    		try {
    			time = format.parse(date).getTime();
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    		return time;
    	}
    	
    	/**对list进行升序排序
    	 * @param list
    	 * @return
    	 */
    	public List<Vertical> sort(List<Vertical> list){
    		Collections.sort(list, new Comparator<Vertical>() {
    			/* (non-Javadoc)
    			 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
    			 * @return 有三种情况,负数,正数,0
    			 * -负数代表左值小于右值,排在前面
    			 * -正数代表左值大于右值,排在后面
    			 * -0代表左值等于右值,排在前面
    			 */
    			@Override
    			public int compare(Vertical o1, Vertical o2) {
    				/*
    				 * compareTo方法返回介绍
    				 * -如果指定的数与参数相等返回0。
    				 * -如果指定的数小于参数返回 -1。
    				 * -如果指定的数大于参数返回 1。
    				 */
    				return o1.getSerialNumber().compareTo(o2.getSerialNumber());
    			}
    		});
    		return list;
    	}
    }
    
    

    Horizontal.java

    package com.excel.entity;
    
    /**横向表格内容实体类
     * @author zql
     */
    public class Horizontal {
    
    	private String workContent;//工作内容
    	
    	private String serialNumber; //编号
    	
    	private String name;//名称
    	
    	private String department;//部门
    	
    	private String allHead;//总负责人
    	
    	private String allHeadTel;//总负责人电话
    	
    	private String workspace;//地点
    	
    	private Long createDate;//日期
    	
    	private String testHead;//测试负责人
    	
    	private String testHeadTel;//测试负责人电话
    	
    	private String testPlan;//测试方案
    	
    	private String situation;//组织情况
    	
    	private Integer temperature;//气温
    	
    	private String weather;//天气
    	
    	private Long startTime;//开始时间
    	
    	private Long endTime;//结束时间
    	
    	private String totalTime;//总用时
    
    	public String getWorkContent() {
    		return workContent;
    	}
    
    	public void setWorkContent(String workContent) {
    		this.workContent = workContent;
    	}
    
    	public String getSerialNumber() {
    		return serialNumber;
    	}
    
    	public void setSerialNumber(String serialNumber) {
    		this.serialNumber = serialNumber;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public String getDepartment() {
    		return department;
    	}
    
    	public void setDepartment(String department) {
    		this.department = department;
    	}
    
    	public String getAllHead() {
    		return allHead;
    	}
    
    	public void setAllHead(String allHead) {
    		this.allHead = allHead;
    	}
    
    	public String getAllHeadTel() {
    		return allHeadTel;
    	}
    
    	public void setAllHeadTel(String allHeadTel) {
    		this.allHeadTel = allHeadTel;
    	}
    
    	public String getWorkspace() {
    		return workspace;
    	}
    
    	public void setWorkspace(String workspace) {
    		this.workspace = workspace;
    	}
    
    	public Long getCreateDate() {
    		return createDate;
    	}
    
    	public void setCreateDate(Long createDate) {
    		this.createDate = createDate;
    	}
    
    	public String getTestHead() {
    		return testHead;
    	}
    
    	public void setTestHead(String testHead) {
    		this.testHead = testHead;
    	}
    
    	public String getTestHeadTel() {
    		return testHeadTel;
    	}
    
    	public void setTestHeadTel(String testHeadTel) {
    		this.testHeadTel = testHeadTel;
    	}
    
    	public String getTestPlan() {
    		return testPlan;
    	}
    
    	public void setTestPlan(String testPlan) {
    		this.testPlan = testPlan;
    	}
    
    	public String getSituation() {
    		return situation;
    	}
    
    	public void setSituation(String situation) {
    		this.situation = situation;
    	}
    
    	public Integer getTemperature() {
    		return temperature;
    	}
    
    	public void setTemperature(Integer temperature) {
    		this.temperature = temperature;
    	}
    
    	public String getWeather() {
    		return weather;
    	}
    
    	public void setWeather(String weather) {
    		this.weather = weather;
    	}
    
    	public Long getStartTime() {
    		return startTime;
    	}
    
    	public void setStartTime(Long startTime) {
    		this.startTime = startTime;
    	}
    
    	public Long getEndTime() {
    		return endTime;
    	}
    
    	public void setEndTime(Long endTime) {
    		this.endTime = endTime;
    	}
    
    	public String getTotalTime() {
    		return totalTime;
    	}
    
    	public void setTotalTime(String totalTime) {
    		this.totalTime = totalTime;
    	}
    }
    
    

    Vertical.java

    package com.excel.entity;
    
    import java.math.BigDecimal;
    
    /**横向表格内容实体类
     * @author zql
     */
    public class Vertical {
    
    	private String serialNumber; //编号
    	
    	private String name;//名称
    	
    	private String unit;//单位
    	
    	private BigDecimal loss;//消耗
    	
    	private BigDecimal price;//价格
    	
    	private BigDecimal weight;//重量
    	
    	public String getSerialNumber() {
    		return serialNumber;
    	}
    	public void setSerialNumber(String serialNumber) {
    		this.serialNumber = serialNumber;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getUnit() {
    		return unit;
    	}
    	public void setUnit(String unit) {
    		this.unit = unit;
    	}
    	public BigDecimal getLoss() {
    		return loss;
    	}
    	public void setLoss(BigDecimal loss) {
    		this.loss = loss;
    	}
    	public BigDecimal getPrice() {
    		return price;
    	}
    	public void setPrice(BigDecimal price) {
    		this.price = price;
    	}
    	public BigDecimal getWeight() {
    		return weight;
    	}
    	public void setWeight(BigDecimal weight) {
    		this.weight = weight;
    	}
    	
    }
    
    

    ExcelParseMapper.java地址:excel文件上传解析工具类【版本1.4】
    FileUtil.java地址:文件操作工具类

    spring-mvc.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="
    	http://www.springframework.org/schema/context
    	http://www.springframework.org/schema/context/spring-context.xsd
    	http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans.xsd">
        
        <!-- 设置扫描位置 -->
    	<context:component-scan base-package="com.excel.action"/>
        
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 这个配置是配置jsp页面的位置,按照你自己的配置来配 --> 
            <property name="prefix" value="/WEB-INF/pages/"></property>  
            <property name="suffix" value=".jsp"></property>
        </bean>
        
    </beans>
    

    parse.jsp,注意,charset请设为utf-8,否则返回的提示会是乱码。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>Message : ${message}</h1>   
    </body>
    </html>
    

    index.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<form action="rest/act/parseExcel" method="post" enctype="multipart/form-data">
    		<input type="file" name="excelFile"/>
    		<input type="submit" value="上传"/>
    	</form>
    </body>
    </html>
    

    二、创建tomcat服务器

    步骤一:
    在这里插入图片描述

    步骤二:
    在这里插入图片描述

    步骤三:

    在这里插入图片描述
    步骤四:
    在这里插入图片描述
    步骤五:
    在这里插入图片描述
    Debug后,过一会,看到如下,就可以打开浏览器测试了。

    三、测试结果

    打开浏览器,输入http://127.0.0.1:8080/ExcelParseMapper/,进入到index.html,点击浏览,选择测试的excel文件,然后点击上传。
    在这里插入图片描述

    测试的excel截图:
    在这里插入图片描述

    测试结果截图:
    在这里插入图片描述

    展开全文
  • 一个上传Excel文件并将内容保存到数据库中,附有完整代码,希望对您有帮助.
  • c# excel采用三种方式上传数据 c# excel采用三种方式上传数据
  • 对于只操作2003及以前版本的excel,只需要导入poi-XXX.jar ,如果还需要对2007及以后版本进行操作,则需要导入 poi-ooxml-XXX.jar poi-ooxml-schemas-XXX.jar Maven方式 <dependency> <groupId>org....

    1.导入poi相关jar包

    对于只操作2003及以前版本的excel,只需要导入poi-XXX.jar ,如果还需要对2007及以后版本进行操作,则需要导入

    poi-ooxml-XXX.jar

    poi-ooxml-schemas-XXX.jar

    Maven方式

    <dependency>
              <groupId>org.apache.poi</groupId>
              <artifactId>poi<
    展开全文
  • web开发excel文件上传及解析(上)

    千次阅读 2018-11-17 11:34:22
    web开发的时候,我们经常有遇到文件的上传以及解析的需求,比如我们将excel文件上传并且解析,最后将解析的excel的内容插入到数据库中,今天就实践一下文件的上传以及excel的解析,这篇博客主要是实践文件上传功能...

    前言

    在web开发的时候,我们经常有遇到文件的上传以及解析的需求,比如我们将excel文件上传并且解析,最后将解析的excel的内容插入到数据库中,今天就实践一下文件的上传以及excel的解析,这篇博客主要是实践文件上传功能,对应的excel文件的解析,将在下一篇博客实践。

    准备工作:

    本文上传文件使用了apche下面的commons-fileupload.jar、commons-io.jar

    如果是maven项目,则需要在pom.xml配置如下依赖

    <dependency>
    	<groupId>commons-fileupload</groupId>
    	<artifactId>commons-fileupload</artifactId>
    	<version>${commons.fileupload.version}</version>
    </dependency>
    
    <dependency>
    	<groupId>commons-io</groupId>
    	<artifactId>commons-io</artifactId>
    	<version>2.2</version>
    </dependency>

    如果不是maven项目则下载jar包的,然后导入到项目中,下载地址如下:

    链接:https://pan.baidu.com/s/12FHorV5ImIn4aiCqFcBUkg 密码:yxgj

    功能实现:

    用上述两个jar包实现上传的功能比较简单,这里就直接上传代码

    前端代码:主要就是一个表单

    <form name="frm_test" action="${pageContext.request.contextPath }/uploadExcelFile" method="post" enctype="multipart/form-data">
    		用户名:<input type="text" name="userName">  <br/>
    		文件:   <input type="file" name="file">   <br/>
            <input name="upload" type="submit" value="上传">
    </form>

    注意事项,一定要将enctype="multipart/form-data",另外就是<input type="file" name="file">

    其他没什么注意的地方,记得接口不要写错了

    后台代码:

    @RequestMapping(value="/uploadExcelFile",method=RequestMethod.POST,produces = "text/html;charset=UTF-8")
    	@ResponseBody
    	public String uploadExcelFile(@RequestParam("file") CommonsMultipartFile file,HttpServletRequest request) {
    		try {
    			String path = request.getSession().getServletContext().getRealPath("/");
    			String fileName = "display.xlsx";
    			File excelFile = new File(path+fileName);
    			LOGGER.info("uploadExcelFile file = "+excelFile.toString());
    			if(excelFile.exists()) {
    				excelFile.delete();
    			}
    			file.transferTo(excelFile);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    			return "fail";
    		}
    		return "success";
    	}

     这里有个小的地方需要注意@RequestParam("file")这个里面的file和前端的 <input type="file" name="file">中的name=“file”要一致。

    这部分代码是简单的功能实现,并不是特别符合springmvc的设计,因为良好的mvc的设计controller层是不能写太多的逻辑,业务逻辑应当写道model层去的。另外返回的话也只是简单的返回success和fail。除了上面的代码,还需要在配置文件applicationContext.xml中配置一个关键的bean,不然上传的时候会报错。

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
            p:maxUploadSize="5242880"
            p:maxInMemorySize="4096"
            p:defaultEncoding="UTF-8">
    
        </bean>

    这里有个注意的地方就是bean的id必须设置为“multipartResolver”,不然同样会报错的。

    好了,按照上面的操作,基本上是可以实现文件上传的功能,下面看运行的效果吧

    前端展示:

    我这边是上传到了tomcat中对应的该项目中,上传之后的该项目的根目录

    这里仅仅是实战了一把文件上传的功能,接下来看看如何实现excel的文件解析,excel文件解析

     

    展开全文
  • servlet:private static final long FILE_MAX_SIZE = 4 * 1024 * 1024;if (!ServletFileUpload.isMultipartContent(request)) {System.out.println("失败1");}String fileTempPath = this.getServletContext()....
  • 使用EsayExcel 实现 web上传excel文件(读取excel文件) 1.创建项目、添加依赖 <!-- 官方文档 https://www.yuque.com/easyexcel/doc/read#1bfaf593 --> <dependency> <groupId>com.alibaba</...
  • // // } @Override public void invoke(ExcelModel excelModel, AnalysisContext analysisContext) {//此方法一行一行的读取Excel内容 if (excelModel.getUsername() != null) { //做一个简单的判断,可根据自己的...
  • 前端_HTML_Web Excel导入

    2018-04-26 17:44:31
    前端_HTML_Web Excel导入,内有可以使用的demo,前端_HTML_Web Excel导入,内有可以使用的demo
  • java webexcel文件上传与解析

    万次阅读 2015-08-23 15:17:17
    0.前言项目中需要解析用户上传excel文件,校验单元格格式,并数据入库。在实现的过程中遇到了不少问题,并一一解决了,所以总结一下,希望对大家有所帮助。1.页面传递文件这里实现了最简单的形式,注意将enctype设...
  • Java Web 文件上传

    2021-02-26 13:29:24
    在我们的web开发中,很多的时候都需要把本机的一些文件上传web服务器上面去如:一个BBS系统,当用户使用这是系统的时候,能把本机的一些图片,文档上传到服务器上面去。然后其他用户可以去下载这些文件,那么这样...
  • asp.net导入excel文件到sqlserver数据库,数据库根据代码随便创建一个就行,完美注释,一学就会!
  • @PostMapping("/upload") @ApiOperation(notes = "上传学生表",value = "传入Excel") public Re upload(@RequestParam(value="file",required = false) MultipartFile file){ try{ studentService.readExcel(file);...
  • ()" accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/> ``` 前台代码: function fileChange(){ $('#file_form').submit(); } 后台代码: @Controller...
  • web开发excel文件上传及解析(下)

    千次阅读 2018-11-17 14:39:26
    接着上一篇博客文件上传,这一篇博客实践的是excel文件的解析,通常我们会需要这样的需求,就是让用户下载一个格式的模板,然后在模板中按照要求填写资料,最后的就是将excel中的内容全部保存到数据库中,从而实现一...
  • 自学springmvc写的代码,初学者可以看看一起进步
  • .net web导入excel功能

    2011-04-01 14:37:32
    .net web导入excel功能 开发比用···········
  • JavaSevlet解析上传Excel

    2013-11-12 15:05:23
    java web项目 解析上传到服务器的Excel文档
  • java web读取excel表格内容所需的jar包,包括dom4j-1.6.1,geronimo-stax-api_1.0_spec-1.0,poi系列,xmlbeans
  • poi操作Excel导入导出,web项目实例 先执行导出的Demo,会自动在桌面上生成Excel,然后执行导入Demo,会自动导入桌面的Excel的内容
  • springboot上传excel到oss

    2021-01-13 14:37:28
    SpringMVc上传excel或csv文件 1.JSP页面代码 使用ocupload和POI一键上传Excel并解析导入数据库 使用的工具如下: JQuery ocupload jquery.ocupload-1.1.2.js Apache POI poi-3.9.jar 如果是Maven项目添加依赖如下: ...
  • packagecom.yami.shop.admin.controller;importcom.fasterxml.jackson.core.type.TypeReference;importcom.fasterxml.jackson.databind....importcom.yami.shop.admin.config.ImportExcel;importcom.yami....
  • Django框架(上传Excel文件并读取) 博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py ...
  • WEB页面嵌入Excel报表

    热门讨论 2011-01-14 23:02:09
    然后根据上传Excel报表相关的计算公式或自定义函数在WEB项目内定义解析然后以二进流的形式显示在Web页面即Web页面嵌入Excel显示报表数据。资料包括项目源码、数据库表、测试报表Excel及使用的weboffice6.0的插件API...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,480
精华内容 8,592
关键字:

web上传excel