springmvc上传并解析excel文件

springMVC poi解析ajax上传excel文件,返回json对象\list数组 poi解析excel功能参数说明 此项目是基于springMVC实现的,基本流程为从前台jsp页面使用Ajax文件上传导入excel文件(.xls(97-03)/.xlsx(07以后)),传到后台controller调用相应工具类解析后返回指定参数做后续处理. 1. POIUtil.java工具类 解析通过MutilpartFile导入的Excel并解析里面数据,先判断文件的类型(excel处理有两种此处为两种通用)是.xls/.xlsx,通过workbook.getNumberOfSheets()获取工作簿数量,遍历工作簿,sheet.getLastRowNum()获取最大行数,将每行数据放入List list = new Array List(),并根据excel数据类型将器转换为字符串、数字、Boolean、公式、空值类型防止出现错误,最后返回一个list. 2. ExcelUtil.java工具类 解析通过MutilpartFile导入的Excel并解析里面数据,先判断文件的类型(excel处理有两种此处为两种通用)是.xls/.xlsx,采用Apache的POI的API来操作Excel,读取内容后保存到List中,再将List转Json(使用Linked,增删快,与Excel表顺序保持一致),Sheet表1————>List1<Map> 步骤1:根据Excel版本类型创建对于的Workbook以及CellSytle 步骤2:遍历每一个表中的每一行的每一列,这里做了些小改动,因为后续可能解析过后可能会保存入数据库,这里为第一行数据添加一个自定义表头 String[] p = new String[]{"name","age","sex","tel","address","e-mail","phone"}; 遍历的列数量以p的length为准 步骤3:一个sheet表就是一个Json,多表就多Json,对应一个 List 一个sheet表的一行数据就是一个 Map 一行中的一列,就把当前列头为key,列值为value存到该列的Map中 Map 一个线性Hash Map,以Excel的sheet表顺序,并以sheet表明作为key,sheet表转换Json后的字符串作为value 最后返回一个LinkedHashMap 3. ExcelToJsonPoi.java工具类 这个与上面工具类类似,不过这个是解析本地excel文件不是使用的流,使用迭代遍历sheet工作簿与每行每列的值,将所有类型作为String类型处理返回一个json对象输出至控制台 立即下载

1.从jsp页面提交上传excel文件

<script type="text/javascript">
jQuery(document).ready(function(){
	jQuery("#templetId").click(function(){
		var btn = $(this);
        btn.button('loading');
        setTimeout(function () {btn.button('reset')}, 2000);
		var url="/cancelInsurance/gettemplet.do";
		$("#getTemplet").attr("action",url); 
		$("#getTemplet").submit();
	});
});
<form:form id="getTemplet" action=""></form:form>
<form:form id="cancelInfo" action="cancelInsuranceEdit.do"  method="post" enctype="multipart/form-data">
		<div class="control-group">
			<div class="controls">
				<label class="control-label">选择退保文件:</label>
					<input type="file" name="cancelFiles" id="cancelFiles" accept=".xls,.xlsx,application/vnd.ms-excel" class="required"/> 
					<button class="btn btn-info" data-loading-text="loading..." id="templetId" type="button">点击下载退保模板</button>
			</div>
		</div><br/><br/><br/>
		<div>
			<input id="btnSubmit" class="btn btn-primary btn-large" type="submit" data-loading-text="loading..." value="确认退保" style="margin-left: 200px;width: 200px;"/>&nbsp;
		</div>
	</form:form>

其中,点击获取模板访问/cancelInsurance/gettemplet.do,获取模板的java代码如下

@RequestMapping(value = "gettemplet", method = RequestMethod.POST)
	public void getTemplate(HttpServletRequest request,
			RedirectAttributes redirectAttributes, HttpServletResponse response) {
		OutputStream out = null;
		InputStream is = null;
		try {
			is = new BufferedInputStream(this.getClass().getResourceAsStream(
					"/templates/jdCancelInsurance.xls"));//找到项目中存储的.xls文件
			ExcelUtil.setExcelResponse(response,"批量退保模板");
			Map beans = Maps.newHashMap();
			beans.put("loginName", UserUtils.getUser().getLoginName());
			Workbook workbook = WriteExcel.write(is, beans);
			// 将内容写入输出流并把缓存的内容全部发出去
			out = response.getOutputStream();
			workbook.write(out);
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
				}
			}
		}
	}

2.解析.xls文件(controller),java代码如下

ReadExcels readExcel=new ReadExcels();
//解析excel,获取客户信息集合。
List<CancleInsuranceInfo> customerList = readExcel.getExcelInfo(filename ,multipartFile);

3.工具类,java代码如下

public class ReadExcels {
    //总行数
    private int totalRows = 0;  
    //总条数
    private int totalCells = 0; 
    //错误信息接收器
    private String errorMsg;
    //构造方法
    public ReadExcels(){}
    //获取总行数
    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 || !(WDWUtil.isExcel2003(filePath) || WDWUtil.isExcel2007(filePath))){  
            errorMsg = "文件名不是excel格式";  
            return false;  
        }  
        return true;
  }
public List<CancleInsuranceInfo> getExcelInfo(String fileName,MultipartFile multipartFile){
       //初始化退保信息的集合    
       List<CancleInsuranceInfo> customerList=new ArrayList<CancleInsuranceInfo>();
       //初始化输入流
       InputStream is = null;  
       try{
          //验证文件名是否合格
          if(!validateExcel(fileName)){
              return null;
          }
          //根据文件名判断文件是2003版本还是2007版本
          boolean isxls = true; 
          if(WDWUtil.isxlsx(fileName)){
              isxls = false;  
          }
          //根据新建的文件实例化输入流
          is = multipartFile.getInputStream();
          //根据excel里面的内容读取客户信息
          customerList = getExcelInfo(is, isxls); 
          is.close();
      }catch(Exception e){
          e.printStackTrace();
      } finally{
          if(is !=null)
          {
              try{
                  is.close();
              }catch(IOException e){
                  is = null;    
                  e.printStackTrace();  
              }
          }
      }
      return customerList;
  }
  /**
   * 根据excel里面的内容读退保信息
   * @param isxls excel是xls文件还是xlsx文件
   * @return
   * @throws IOException
   */
  public  List<CancleInsuranceInfo> getExcelInfo(InputStream is,boolean isxls){
       List<CancleInsuranceInfo> cancleInsuranceInfo=null;
       try{
           /** 根据版本选择创建Workbook的方式 */
           Workbook wb = null;
           //当excel是xls时
           if(isxls){
               wb = new HSSFWorkbook(is);
           }
           else{//当excel是xlsx文件时
               wb = new XSSFWorkbook(is); 
           }
           //读取Excel里面退保信息
           cancleInsuranceInfo=readExcelValue(wb);
       }
       catch (IOException e)  {  
           e.printStackTrace();  
       }  
       return cancleInsuranceInfo;
  }
  /**
   * 读取Excel里面的信息
   * @param wb
   * @return
   */
  private List<CancleInsuranceInfo> 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<CancleInsuranceInfo> cancleInsuranceInfos=new ArrayList<CancleInsuranceInfo>();
       CancleInsuranceInfo cancleInsuranceInfo;            
      //循环Excel行数,从第二行开始。标题不进行统计
       for(int r=1;r<totalRows;r++){
           Row row = sheet.getRow(r);
           if (row == null) continue;
           cancleInsuranceInfo = new CancleInsuranceInfo();
           
           //循环取出Excel的列
           for(int c = 0; c <this.totalCells; c++){    
               Cell cell = row.getCell(c);
               cell.setCellType(Cell.CELL_TYPE_STRING);
               if (null != cell){
                   if(c==0){//取出第一列
                	   cancleInsuranceInfo.setServerNumber(cell.getStringCellValue());
                   }else if(c==4){//取出第五列
                	   cancleInsuranceInfo.setBackCode(cell.getStringCellValue());
                	   break;
                   }
               }
           }
           //添加退保信息
           cancleInsuranceInfos.add(cancleInsuranceInfo);
       }
       return cancleInsuranceInfos;
  }
}

 

SpringMvc+POI 处理Excel的导入操作 springMVC 整合poi导入数据,在很多项目中都会使用,能大大减少很多工作量 立即下载

相关推荐

SpringMVC上传和解析Excel方法

主要介绍了SpringMVC上传和解析Excel方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Spring-MVC jsp导入excel到数据库

被导入excel到数据库整了两天,终于搞定了,分享出来给大家,希望有些帮组,肯定有更好的方法,希望大神指教:     前台jsp:                  提交之后到controller    /** * 导入数据 * @throws IOException  */ @RequestMapping("importData") public ModelAn

思考的稻草人 2706

VS2022打包C#安装包(最新、最全)

VS2022打包C#安装包(最新、最全)

qq_37959253的博客 9893

springMVC下的后台controller层获取页面导入的excel数据并解析

文件的数据解析,首先都必须知道数据在文件中的结构。而excel由于结构清晰,用单元格对数据进行了分割,每个单元格就是唯一的一个数据。解析相对容易。实际应用也比较广泛。 这里我先给个excel的数据结构demo,然后解析这个模板内的数据。 看上图是为了让大家明白文件处在本地项目的位置,和该文件模板内的数据结构。该信息处于sheet1,模板中前两行(row)是标题和列属性。从第三行(row)开始是

万米高空的博客 1万+

数字IC后端PPA优化实战:Timing一致性策略与Module Region布局技巧

本文深入探讨了数字IC后端设计中的PPA优化实战,重点解析了Timing一致性问题及其解决方案。通过调整Clock Uncertainty、Timing Derate和RC Scale Factor等关键参数,使Innovus等PR工具的分析结果更接近PrimeTime签核结果。同时,文章详细介绍了Module Region布局技巧,通过为关键模块划定物理区域,优化单元摆放,有效减少线延迟,从而协同提升时序收敛效率与设计可预测性。

weixin_29218963的博客 202

Jetson nano/nx使用麒麟arm版向日葵实现远程控制

Jetson nano/nx使用麒麟arm版向日葵实现远程控制1、安装向日葵软件2、运行Sunlogin Client3、向日葵闪退问题4、重启系统5、重启后黑屏问题 特别提醒: 本博客的第3步切换桌面管理环境到lightdm,存在重启后开机黑屏的风险,我在自己的nano/nx上都没有问题,但帮一个同学的nx配置时,切换到lightdm,重启开机却出现了黑屏,所以执行第3步的话要有心理准备,黑屏解决方法见第5步,特此提醒。

胡乱学点东西 2万+

springMVC从上传的Excel文件中读取数据

示例:导入客户文件(Excle文件) 一、编辑customer.xlsx 二、在spring的xml文件设置上传文件大小 上传文件拦截,设置最大上传文件大小 10M=10*1024*1024(B)=10485760 bytes --> bean id="multipartResolver" class="org.springframework.web.multipart

南国樱花祭 3万+

基于AC算法的图像显著性检测及Matlab代码实现

以上是基于AC算法的图像显著性检测的Matlab代码实现。图像显著性检测是计算机视觉领域的一个重要任务,其目标是确定图像中最具有显著性的区域,即吸引人眼注意力的区域。图像显著性检测是计算机视觉领域的一个重要任务,其目标是确定图像中最具有显著性的区域,即吸引人眼注意力的区域。AC算法的原理基于人眼视觉系统的特性,人眼在观察图像时通常会先关注图像中的显著性区域,然后才会注意到其他细节。AC算法的原理基于人眼视觉系统的特性,人眼在观察图像时通常会先关注图像中的显著性区域,然后才会注意到其他细节。

TechPulseZ的博客 438

jsp+poi+springMVC实现导入excel数据

1 .加入依赖的包,我这里使用的是maven <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> ...

hexu_blog的博客 1323

深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总

本文简要介绍深度学习的前向传播与反向传播,以及前馈神经网络与反馈神经网络。

haopinglianlian的博客 3042

POI解析Excel文件并利用SpringMVC上传下载

本文主要介绍的是利用POI技术解析Excel文件,包括将Excel文件封装成一个实体对象List和将实体对象List转换文Excel文件 ,本人也是多次会用了POI技术和SpringMVC上传下载技术,下面是详细介绍。 1、POI解析Excel文件并文件上传 前端jsp页面通过表单编写,代码如下: <form class="form-horizontal" action="${App...

qi_ming88的博客 1331

AI奶牛TMR智能饲喂机器人 Qt信创完整项目( 统信/麒麟国产系统直接编译)

内置**犊牛、育成牛、围产牛、泌乳牛、干奶牛**5套标准化饲喂配方;+" 饲喂批次完成|牛群:"+grpText+"|投喂饲料:"+QString::number(ft)+"吨|剩料:"+QString::number(st)+"吨|异常牛:"+QString::number(abCow);cv::putText(frame,"霉变变质饲料禁止饲喂",cv::Point(20,40),cv::FONT_HERSHEY_SIMPLEX,0.7,cv::Scalar(0,0,255),2);

寒寒豆豆软件公司的博客 181

Springmvc文件上传例子,上传带图片的Excel,并利用poi解析。

直奔主题,第一步:上传一个带图片的Excel。第二步:解析该Excel文件,得到Excel数据和图片。

u013034378的博客 1870

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

服务器上传excel文件并读取数据,SpringMVC接收上传的Excel并解析获取内容_上传Excel文件中读取数据...

系统中常用到的批量导入功能,根据Excel内容批量插入,这里实现获取上传的Excel内容,由于offer2003前和2007后的版本所使用的API不一样,这里也做了兼容处理,兼容2003和20071.引入maven包org.apache.poipoi3.9org.apache.poipoi-ooxml3.9org.apache.poipoi-ooxml-schemas3.92.Controller...

weixin_29053383的博客 679

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

使用maven+springmvc+POI对上传的Excel文件进行解析并操作

经过前几篇文章,已经成功把excel文件成功上传成功了,接下来就是要在后台中拿到excel的每一行和每一列进行操作。 怎样解析excel文件拿到里面的内容就变得重中之重了,请看我下面的“神来之笔"。 1、pom.xml org.apache.poi poi 3.14 org.apache.poi poi-ooxml 3.14

CongBird的博客 7292

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SpringMVC file上传excel文件到html页面显示后加入数据库

html    js controller readExcel

火木花子 4422

ssm框架中导入excel文件

一、先在pom.xml中引入commons-fileupload依赖 <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> 二、JSP页面 给

m0_59359926的博客 4736

基于Java语言SpringMVC框架的Excel上传解析以及下载教程

基于SpringMVC的Excel上传解析以及下载 简介: 本文主要基于Java的,介绍的分为三个部分,文件上传、Excel解析、文件下载,然而这三个部分都有各种各样的方法实现,原生的最通用,但也是代码量最多,本文介绍的只是基于spring,可能使用的人群没原生的那么多,仅供参考。

moon_cup的博客 660

SpringMVC导入Excel文件到MySQL

使用SpringMVC导入Excel文件到MySQL时,由于是第一次做,所以走了比较多弯路,希望这篇文章能够给和我一样新学的童鞋,一点启发~做这个的时候,参考了比较多的文章,特别是最后两个文件上传类和解析类的,然后根据自己的项目需要进行修改。现在找不到之前看的帖子了,所以未能贴上参考网址,如果有知道的童鞋也可以告诉我一下哈~ (关于前台上传部分,可以参考这里) SpringMVC的配置文件,需要

Mr Mirror的博客 3053

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

最近写了一个基于poi解析excel文件的工具类,所以想在web项目中测试一下,就做了这个简单的项目。本项目主要使用了 SpringMVC+RESTful+Maven的风格。适合有一定基础的人员。 一、建立项目 首先,打开eclipse,新建一个动态项目。 对项目命名 然后一直Next直到finish 建好项目后,选择项目右击,Configure>Convert to Maven Pr...

似水流年风萧兮 4534

Java springmvc Excel(poi) 的导入导出(上传下载)

maven <!--excel--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.15</version> &lt...

振兴中华的博客 648

Java解析导入Excel文件后台代码实现

使用MultipartFile上传Excel文件后端代码实现:(springmvc下的spring-webmvc (MultipartFile )上传)  由于POST一个包含文件上传的Form会以multipart/form-data请求发送给服务器,必须明确告诉转发器(DispatcherServlet)如何处理MultipartRequest。首先,在配置文件中声明一个Multip...

weixin_38168590的博客 259

SpringMVC读取前台上单Excel文件并解析数据

SpringMVC读取前台上单Excel文件并解析数据 废话不多说直接上代码 首先你需要一个工具类:ReadExcel import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermod

陆仁丶的博客 295

结合项目(Spring+(基于注解的)SpringMVC和Mybatis+uploadify文件上传)--poi解析Excel文件

1.上传文件至服务器 2.解析Excel文件并返回数据集合 3.将数据保存到服务器 框架======Spring+(基于注解的)SpringMVC和Mybatis===== 第一步: 前台: jsp文件采用的是uploadify js: //当DOM(文档对象模型)载入就绪可以查询及操纵时绑定一个要执行的函数。 $(document).ready(funct

习惯有你&的博客 2443
上一篇: jsp页面暨Java后端验证手机号的正则表达式(最新)
下一篇: java中给当前日期增加固定的天数
猫头猫@2048
博客等级 码龄9年 22粉丝 15原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值