package com.platform.utils.excel;import com.platform.utils.RRException;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.util.List;
import java.util.Map;/*** Excel文件导入的基本功能类* 可导入EXCEL2003 和 EXCEL2007格式。** @date 2017年10月28日 13:11:27*/
public class ExcelImport {/*** excel2003扩展名*/public static final String EXCEL03_EXTENSION = ".xls";/*** excel2007扩展名*/public static final String EXCEL07_EXTENSION = ".xlsx";private ExcelImport() {}/*** 解析EXCEL数据为 List<String[]>** @param excelFile 要解析的上传EXCEL文件* @return List<String[]) 行(列)*/public static List<String[]> getExcelData07(MultipartFile excelFile) {List<String[]> resultList = null;if (null == excelFile || excelFile.isEmpty()) {throw new RRException("文件内容为空!");}Excel2007Reader excel07 = new Excel2007Reader();try {excel07.process(excelFile.getInputStream(), false);} catch (Exception e) {throw new RRException("excel解析失败!");}resultList = excel07.getSheetData(0);return resultList;}/*** 解析EXCEL数据为 List<String[]>** @param excelFile 要解析的上传EXCEL文件* @return List<String[]) 行(列)*/public static List<String[]> getExcelData03(MultipartFile excelFile) {List<String[]> resultList = null;if (null == excelFile || excelFile.isEmpty()) {throw new RRException("文件内容为空!");}Excel2003Reader excel03 = new Excel2003Reader();// 实例化excel处理对象try {excel03.process(excelFile.getInputStream());} catch (IOException e) {throw new RRException("excel解析失败!");}resultList = excel03.getSheetData(0);return resultList;}/*** 通过解析MultipartFile对象获取excel内容,并且将其拼装为List<String[]>对象返回** @param excelFile* @return* @throws Exception*/public static List<String[]> getExcelData(MultipartFile excelFile)throws RRException {List<String[]> resultList = null;if (!excelFile.isEmpty()) {// 上传的文件不能为空String excelFileName = excelFile.getOriginalFilename();// 文件名(带后缀)if (excelFileName.toLowerCase().endsWith(EXCEL03_EXTENSION)) {// 如果文件是以.xls为后缀Excel2003Reader excel03 = new Excel2003Reader();// 实例化excel处理对象try {excel03.process(excelFile.getInputStream());} catch (IOException e) {throw new RRException("excel解析失败!");}resultList = excel03.getSheetData(0);} else if (excelFileName.toLowerCase().endsWith(EXCEL07_EXTENSION)) {// 如果文件是以.xlsx为后缀Excel2007Reader excel07 = new Excel2007Reader();try {excel07.process(excelFile.getInputStream(), false);} catch (Exception e) {throw new RRException("excel解析失败!");}resultList = excel07.getSheetData(0);}}return resultList;}/*** 通过解析MultipartFile对象获取excel内容,并且将其拼装为Map<Integer, List<String[]>>对象返回** @param excelFile* @return* @throws Exception*/public static Map<Integer, List<String[]>> getExcelDataAll(MultipartFile excelFile)throws RRException {Map<Integer, List<String[]>> result = null;if (!excelFile.isEmpty()) {// 上传的文件不能为空String excelFileName = excelFile.getOriginalFilename();// 文件名(带后缀)if (excelFileName.toLowerCase().endsWith(EXCEL03_EXTENSION)) {// 如果文件是以.xls为后缀Excel2003Reader excel03 = new Excel2003Reader();// 实例化excel处理对象try {excel03.process(excelFile.getInputStream());} catch (IOException e) {throw new RRException("excel解析失败!");}result = excel03.getSheetData();} else if (excelFileName.toLowerCase().endsWith(EXCEL07_EXTENSION)) {// 如果文件是以.xlsx为后缀Excel2007Reader excel07 = new Excel2007Reader();try {excel07.process(excelFile.getInputStream(), true);} catch (Exception e) {throw new RRException("excel解析失败!");}result = excel07.getSheetData();}}return result;}
}

RRException 
package com.platform.utils;/*** 自定义异常** * @date 2017年11月18日 下午13:13:23*/
public class RRException extends RuntimeException {private static final long serialVersionUID = 1L;private String msg;private int code = 500;public RRException(String msg) {super(msg);this.msg = msg;}public RRException(String msg, Throwable e) {super(msg, e);this.msg = msg;}public RRException(String msg, int code) {super(msg);this.msg = msg;this.code = code;}public RRException(String msg, int code, Throwable e) {super(msg, e);this.msg = msg;this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}}

利用POI上传Excel 出现如果这一行前几个是空的  传到后台的list里面第一个数据是从有数据的列开始的  这样会造成取数据的时候报错

解决办法:

遍历接受的list,获取头的长度,如果两个长度不同,新定义一个长度和头信息相同的数组,遍历这个数组  将没有数据的在数组里面加上一个空的字符串,再讲数组放到一个list里面

调用set方法

set方法是将原来位置上的那个给取代了,并将原来位置上对象的返回。

 for(int i = 1;i<list.size();i++){if(list.get(i-1).length!=list.get(i).length){Integer count = list.get(0).length-list.get(i).length;String[] a = new String[count];for(int j=0;j<a.length;j++){a[j]="";}List l = new ArrayList(Arrays.asList(list.get(i)));l.addAll(Arrays.asList(a));String[] arr = (String[]) l.toArray(new String[list.get(0).length]);list.set(i,arr);}

转载于:https://www.cnblogs.com/NCL--/p/9754390.html

POI上传Excel的小问题处理相关推荐

  1. poi 上传Excel如何处理大文件,避免内存溢出

    使用poi做上传时,使用一般的形式,用户模式:new WorkBook()时,代码简单易懂,但是这种方式只能操作小文件,遇到大的文件就会报内存溢出的错.有问题就要解决,下面分享几种解决方式 第一种:只 ...

  2. 学习java通过poi上传excel文件

    近期接了一个小功能,需要用到excel导入导出功能,学习了一下apache的poi技术,现做如下笔记: 传统的通过form表单提交上传文件的写法: <form action="XXX& ...

  3. 使用ocupload和POI一键上传Excel并解析导入数据库

    使用的工具如下:  JQuery ocupload jquery.ocupload-1.1.2.js Apache POI poi-3.9.jar 如果是Maven项目添加依赖如下: <depe ...

  4. element-ui上传excel表格,展示在微信小程序中

    文章目录 1.上传表格 2.小程序端拉取列表获取表格路径 3.测试能否打开 1.上传表格 上传成功后调用接口发给后端,后端保存在服务器中,然后返回一个文件路径 /* html <el-uploa ...

  5. php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...

  6. php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...

  7. 前端 js 上传excel表格、文件

    一.场景 产品给了个设计图,需要点击[自定义]图标或者其他图片来完成上传的动作.(打开选择文件弹窗,并选择文件) 思路:利用 input-type 的 "file" 属性来完成. ...

  8. springboot上传excel表格到数据库

    1.引入相关poi依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi< ...

  9. java上传excel以及解析

    一.前言 在写管理后台的需求的时候,经常会用到上传excel的功能,需要我们解析Excel的内容,导入数据等. 二.上传 上传到文件服务器,文件服务有相关的上传接口,需要我们调用API上传. @Pos ...

最新文章

  1. mysql 生成json,结合CONCAT()和COALESCE()在MySQL中生成JSON
  2. java 异步返回_在Java中使用异步后,主方法如何返回异步中得到的值?
  3. 查看mysql是否安装成功和mysql的版本信息
  4. ML Tools List
  5. smtplib python教程_Python使用poplib模块和smtplib模块收发电子邮件的教程
  6. kvm上添加万兆网卡_烂泥:为KVM虚拟机添加网卡
  7. 12.swift 元祖
  8. Linux系统有线网络抓包程序
  9. iptv管理系统php制作,双子星IPTV管理系统搭建教程
  10. 地平线获近亿美元A+轮融资,AI时代的英特尔被英特尔领投
  11. [线程安全问题] 多线程到底可能会带来哪些风险?
  12. 付呗聚合支付快速教程 基础篇②——FubeiUtils付呗工具类(封装参数和签名规则)
  13. sccm可以管理linux补丁,在Linux系统中如何运用SCCM集合?
  14. 海康监控如何设置STMP邮箱报警
  15. 无法访问其它家庭组计算机,Win7电脑同一个家庭组或者工作组,电脑无法相互访问...
  16. FPGA和CPLD的区别
  17. css控制图片拉伸不变形,css+background实现 图片宽高自适应,拉伸裁剪不变形
  18. mysql字符集修改无效,Mysql字符集的修改及查看问题_MySQL
  19. lg 传奇手游java_2020年手机游戏角色扮演类和传奇类 排行榜NO.1 小编强势推荐
  20. 经验分享——关于大学生科研那些事

热门文章

  1. 人类一败涂地电脑版_《漫威复仇者联盟》帧数对比丨PS4《人类一败涂地》新地图上线...
  2. 股票卖出以后可以立即把钱转出吗?
  3. 80后的你现在有多少资产?
  4. 如何选择华为MATE 30 PRO 5G和P40 PRO?
  5. 你有结账时发现太贵的尴尬吗?
  6. 创业赚钱 卖货 做项目如何最大化保证成功?
  7. 你是否遇到过职业枯竭?
  8. binary.Write 小坑一个兼论go的错误处理哲学
  9. C++继承时的一些细节知识点
  10. mysql数据库怎么读文件_mysql数据库读写文件