POI上传Excel的小问题处理
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的小问题处理相关推荐
- poi 上传Excel如何处理大文件,避免内存溢出
使用poi做上传时,使用一般的形式,用户模式:new WorkBook()时,代码简单易懂,但是这种方式只能操作小文件,遇到大的文件就会报内存溢出的错.有问题就要解决,下面分享几种解决方式 第一种:只 ...
- 学习java通过poi上传excel文件
近期接了一个小功能,需要用到excel导入导出功能,学习了一下apache的poi技术,现做如下笔记: 传统的通过form表单提交上传文件的写法: <form action="XXX& ...
- 使用ocupload和POI一键上传Excel并解析导入数据库
使用的工具如下: JQuery ocupload jquery.ocupload-1.1.2.js Apache POI poi-3.9.jar 如果是Maven项目添加依赖如下: <depe ...
- element-ui上传excel表格,展示在微信小程序中
文章目录 1.上传表格 2.小程序端拉取列表获取表格路径 3.测试能否打开 1.上传表格 上传成功后调用接口发给后端,后端保存在服务器中,然后返回一个文件路径 /* html <el-uploa ...
- php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...
- php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...
- 前端 js 上传excel表格、文件
一.场景 产品给了个设计图,需要点击[自定义]图标或者其他图片来完成上传的动作.(打开选择文件弹窗,并选择文件) 思路:利用 input-type 的 "file" 属性来完成. ...
- springboot上传excel表格到数据库
1.引入相关poi依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi< ...
- java上传excel以及解析
一.前言 在写管理后台的需求的时候,经常会用到上传excel的功能,需要我们解析Excel的内容,导入数据等. 二.上传 上传到文件服务器,文件服务有相关的上传接口,需要我们调用API上传. @Pos ...
最新文章
- mysql 生成json,结合CONCAT()和COALESCE()在MySQL中生成JSON
- java 异步返回_在Java中使用异步后,主方法如何返回异步中得到的值?
- 查看mysql是否安装成功和mysql的版本信息
- ML Tools List
- smtplib python教程_Python使用poplib模块和smtplib模块收发电子邮件的教程
- kvm上添加万兆网卡_烂泥:为KVM虚拟机添加网卡
- 12.swift 元祖
- Linux系统有线网络抓包程序
- iptv管理系统php制作,双子星IPTV管理系统搭建教程
- 地平线获近亿美元A+轮融资,AI时代的英特尔被英特尔领投
- [线程安全问题] 多线程到底可能会带来哪些风险?
- 付呗聚合支付快速教程 基础篇②——FubeiUtils付呗工具类(封装参数和签名规则)
- sccm可以管理linux补丁,在Linux系统中如何运用SCCM集合?
- 海康监控如何设置STMP邮箱报警
- 无法访问其它家庭组计算机,Win7电脑同一个家庭组或者工作组,电脑无法相互访问...
- FPGA和CPLD的区别
- css控制图片拉伸不变形,css+background实现 图片宽高自适应,拉伸裁剪不变形
- mysql字符集修改无效,Mysql字符集的修改及查看问题_MySQL
- lg 传奇手游java_2020年手机游戏角色扮演类和传奇类 排行榜NO.1 小编强势推荐
- 经验分享——关于大学生科研那些事