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(); 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(); 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();
} 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();
}
} 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 = ; 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 = ;i<list.size();i++){
if(list.get(i-).length!=list.get(i).length){
Integer count = list.get().length-list.get(i).length;
String[] a = new String[count];
for(int j=;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().length]);
list.set(i,arr);
}
POI上传Excel的小问题处理的更多相关文章
- java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)
使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...
- 使用ocupload和POI一键上传Excel并解析导入数据库
使用的工具如下: JQuery ocupload jquery.ocupload-1.1.2.js Apache POI poi-3.9.jar 如果是Maven项目添加依赖如下: <depe ...
- Uploadify上传Excel到数据库
前两章简单的介绍了Uploadify上传插件的基本使用和相关的属性说明.这一章结合Uploadify+ssh框架+jquery实现Excel上传并保存到数据库. 以前写的这篇文章 Jq ...
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
- SpringBoot(十三)_springboot上传Excel并读取excel中的数据
今天工作中,发现同事在整理数据,通过excel上传到数据库.所以现在写了篇利用springboot读取excel中的数据的demo.至于数据的进一步处理,大家肯定有不同的应用场景,自行修改 pom文件 ...
- 上传excel数据到数据库中
上传excel表格数据到数据库 导入固定路径下的excel数据到数据库 <form id="disposeFlightDataForm" action="../up ...
- postman上传excel,java后台读取excel生成到指定位置进行备份,并且把excel中的数据添加到数据库
最近要做个前端网页上传excel,数据直接添加到数据库的功能..在此写个读取excel的demo. 首先新建springboot的web项目 导包,读取excel可以用poi也可以用jxl,这里本文用 ...
- 微信公众平台上如何上传excel表格?
微信公众平台上如何上传excel表格? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. ...
- poi上传下载
本教程只实现poi简单的上传下载功能,如需高级操作请绕行! <!--poi start--> <dependency> <groupId>org.apache.po ...
随机推荐
- buf.writeDoubleBE()函数详解
buf.writeDoubleBE(value, offset[, noAssert]) buf.writeDoubleLE(value, offset[, noAssert]) value {Num ...
- LearnPython笔记:ex48 代码
赶紧写上 ,一定有人着急要看,啊哈哈哈哈,嘻嘻 哈哈 不枉我起了个大早 利用什么碎片时间啊,真正能深入学习的,是需要大段大段不被打断的时间 1. 完全实现了如下几种输入数据: 2. 遗留:最后一个el ...
- Promise对象和回调函数,解决异步数据传递问题
下面的代码例子,均已小程序的异步请求数据为案例来说明 1.利用回调函数,来解决异步数据传递问题 异步操作api.js const getBooks = (url, callback) => { ...
- 九九乘法表-Java
public class Test1 { public static void main(String[] args){ for(int i=1;i<=9;i++){ for(int j=1;j ...
- [ZJOI2008]杀蚂蚁antbuster
[ZJOI2008]杀蚂蚁antbuster 题目 最近,佳佳迷上了一款好玩的小游戏:antbuster.游戏规则非常简单:在一张地图上,左上角是蚂蚁窝,右下角是蛋糕,蚂蚁会源源不断地从窝里爬出来,试 ...
- 使用ajax,后台传回的数据处理
使用ajax,后台传到前台的是json数据,但这只是一个字符串的形式,需要进行转换为对象 转换后再使用$.each()方法进行遍历 使用alert(typeof msg) ; 可以查看msg的类型 ...
- Node.js和Chrome V8 引擎了解
说起Node就不得不先介绍一个Chrome V8 引擎. 随着Web相关技术的发展,JavaScript所要承担的工作也越来越多,早就超越了“表单验证”的范畴,这就更需要快速的解析和执行JavaScr ...
- 在docker上安装运行mysql实例
ps:实验环境是:CentOS Linux release 7.3 64位1.获取mysql镜像从docker hub的仓库中拉取mysql镜像docker pull mysql查看镜像docker ...
- Android GIS开发系列-- 入门季(2) MapView与图层介绍
一.MapView MapView是Arcgis中的最基本的类,与高德地图SDK的MapView的重要性一样.MapView的创建有两种方法,一种是在Layout文件中直接写控件.一种是实例化,Map ...
- Swift版音乐播放器(简化版)
这几天闲着也是闲着,学习一下Swift的.于是到开源社区Download了个OC版的音乐播放器,练练手,在这里发扬开源精神. 希望对大家有帮助! 这个DEMO里.使用到了 AudioPlayer(对音 ...