第一步:写入maven依赖(3.6是比较稳定的版本,可用于生产环境)

     <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.6</version>
</dependency>

第二步:将Excl导入工具类加进项目中,开箱即用,内置测试main()方法

import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File;
import java.io.FileInputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List; /**
*
* @ClassName: ImportExcelUtil
* @Description: excel 导入数据
* @author JonyChen
* @date 2018年8月13日
* @time 上午10:28:48
*/
public class ImportExcelUtil { private final static String excel2003L =".xls"; //2003- 版本的excel
private final static String excel2007U =".xlsx"; //2007+ 版本的excel /**
* 描述:获取IO流中的数据,组装成List<List<Object>>对象
* @param file
* @return
* @throws Exception
*/
public List<List<Object>> importExcel(File file) throws Exception{
List<List<Object>> list = null; //创建Excel工作薄
Workbook work = this.getWorkbook(file);
if(null == work){
throw new Exception("创建Excel工作薄为空!");
}
Sheet sheet = null;
Row row = null;
Cell cell = null; list = new ArrayList<List<Object>>();
//遍历Excel中所有的sheet
for (int i = 0; i <work.getNumberOfSheets(); i++) {
sheet = work.getSheetAt(i);
if(sheet==null){continue;} //遍历当前sheet中的所有行
for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {
row = sheet.getRow(j);
if(row==null||row.getFirstCellNum()==j){continue;} //遍历所有的列
List<Object> li = new ArrayList<Object>();
for (int y = row.getFirstCellNum(); y <row.getLastCellNum(); y++) {
cell = row.getCell(y);
li.add(this.getCellValue(cell));
}
list.add(li);
}
}
return list;
} /**
* 描述:根据文件后缀,自适应上传文件的版本
* @param file
* @return
* @throws Exception
*/
public Workbook getWorkbook(File file) throws Exception{
Workbook wb = null;
String fileType = file.getName().substring(file.getName().lastIndexOf("."));
if(excel2003L.equals(fileType)){
wb = new HSSFWorkbook(new FileInputStream(file)); //2003-
}else if(excel2007U.equals(fileType)){
wb = new XSSFWorkbook(new FileInputStream(file)); //2007+
}else{
throw new Exception("解析的文件格式有误!");
}
return wb;
} /**
* 描述:对表格中数值进行格式化
* @param cell
* @return
*/
public Object getCellValue(Cell cell){
//用String接收所有返回的值
String value = null;
DecimalFormat df = new DecimalFormat("0"); //格式化number String字符
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); //日期格式化
DecimalFormat df2 = new DecimalFormat("0.00"); //格式化数字 switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING: //String类型的数据
value = cell.getStringCellValue();
break; case Cell.CELL_TYPE_NUMERIC: //数值类型(取值用cell.getNumericCellValue() 或cell.getDateCellValue())
if("General".equals(cell.getCellStyle().getDataFormatString())){
value = df.format(cell.getNumericCellValue());
}else if(HSSFDateUtil.isCellDateFormatted(cell)){
value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
}else{
value = df2.format(cell.getNumericCellValue());
}
break; case Cell.CELL_TYPE_BOOLEAN: //Boolean类型
value = String.valueOf(cell.getBooleanCellValue());
break; case Cell.CELL_TYPE_FORMULA: //表达式类型
value = String.valueOf(cell.getCellFormula());
break; case Cell.CELL_TYPE_ERROR: //异常类型 不知道何时算异常
value=String.valueOf(cell.getErrorCellValue());
break; case Cell.CELL_TYPE_BLANK: //空,不知道何时算空
value = "";
break; default:
value = "";
break;
}
if(value.equals("")||value==null){
value = "";
}
if (cell == null) {
return "";
}
return value;
} //读取excel里的字段
public static void main(String[] args){
ImportExcelUtil importExcelUtil=new ImportExcelUtil();
//excel 导入数据demo
File file = new File("C:\\Users\\srt\\Desktop\\signup_category.xls");
List<List<Object>> dataList= null;
List<SignupCategory> list=new ArrayList<>();
try {
dataList = importExcelUtil.importExcel(file);
} catch (Exception e) {
e.printStackTrace();
}
//数据封装格式一,将表格中的数据遍历取出后封装进对象放进List
for (int i = 0; i <dataList.size(); i++) { Object type_id = dataList.get(i).get(0);
Object type_name = dataList.get(i).get(1); SignupCategory signupCategory=new SignupCategory();
signupCategory.setTypeId(Integer.parseInt((String)type_id));
signupCategory.setTypeName((String)type_name); list.add(signupCategory); System.out.println("------------------");
System.out.println((String)type_id+":"+(String)type_name);
}
System.out.println(JsonUtils.toJson(list));
//数据封装格式二,双重循环遍历取出元素
/*for (int i = 0; i < dataList.size(); i++) {
for (int j = 0; j < dataList.get(i).size(); j++) {
System.out.println(dataList.get(i).get(j));
}
System.out.println("------------------");
}*/
}
}

第三步:在Controller层进行调用即可

补充:

导入基本流程为:前端页面提供excl数据摸板下载地址,用户点击下载模板excl(其实也就是excl的导出),将模板填写完毕后然后再上传至服务器中才调用上面的工具类导入真实数据,上面案例只是将导入的数据取出到控制台进行查看,后期如果有导入数据库的需求,再进行扩展即可,亲测可用,对网上其他教程进行了修正,当前是可用状态!

Maven项目结合POI实现导入导入导入导入导入Excl表格Demo-亲测可用的更多相关文章

  1. Maven项目结合POI导出Excl表格Demo-亲测可用

    Maven项目结合POI导出Excl表格 一.POM文件添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> ...

  2. 亲测可用!在线购书系统项目分享(Java)

    项目简介 项目来源于:https://gitee.com/suimz_admin/BookShop 一个基于JSP+Servlet+Jdbc的书店系统.涉及技术少,易于理解,适合JavaWeb初学者学 ...

  3. windows下的java项目打jar分别编写在windows与linux下运行的脚本( 本人亲测可用!)

    前言: 最近公司做了一个工具,要将这个工具打包成一个可运行的程序,编写start.bat和start.sh在windows和linux下都可以运行. 在网上找了很多资料,最后终于找到一个可靠的资料,记 ...

  4. eclipse 启动项目 报错 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderLis(亲测)

    [原因] 重新 clean  和  install 了maven项目后就启动报错了.解决如下: 右键项目: 属性properties 删除掉引用的其他jar 选择 Deployment Assembl ...

  5. 亲测可用的国内maven镜像

    maven作为一个项目管理工具确实非常好用,之前oschina的中央仓库可用,现在oschina的maven服务器关了,于是自己倒腾了一个nexus,苦于自己的服务器是入门级的,下载速度实在让人着急. ...

  6. 在myeclipse中maven项目关于ssh整合时通过pom.xml导入依赖是pom.xml头部会报错

    错误如下 ArtifactTransferException: Failure to transfer org.springframework:spring-jdbc:jar:3.0.5.RELEAS ...

  7. maven项目引入依赖之后,jar包没有自动导入报错

    解决这个问题可run maven-intall 一下 ,需要在联网的情况下去下载jar包. 我这样做了一下就可以了.

  8. Java进行数据库导出导入 亲测可用

    /** * @param hostIP ip地址,可以是本机也可以是远程 * @param userName 数据库的用户名 * @param password 数据库的密码 * @param sav ...

  9. 将oracle数据库表使用命令的形式导入到excle文件中 亲测可用!

    main.sql 中的代码 set markup html on entmap ON spool on preformat off spool D:\新建文件夹\mick\tables.xls @ge ...

随机推荐

  1. OpenStack openvswitch 实践

    先说下我这架构就是2个节点控制节点+计算节点,网络这采用ovs方法没有路由,就是二层打通并且可以多vlan. 网络架构图: eth0网卡走trunk,走多vlan.从dashboard上创建不同的vl ...

  2. set集合玩法、三目运算

    set是无序的,无法用下标获取值 创建set二种方式 1.第一种 s1=set()   #创建一个空的set,看下面就知道为什么要这么创建一个空的集合 2.第二种 s2={11,22,33,44} # ...

  3. ubuntu下mysql的安装

    1.在终端输入 sudo apt-get install mysql-server mysql-client 2.在此安装过程中会让你输入root用户(管理MySQL数据库用户,非Linux系统用户) ...

  4. 【Splay 总结】

    很多年前学的splay已经忘了? BZOJ 3729 要用Splay啊哭..强制在线.. 二叉查找树 二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree ...

  5. 洛谷P1341 最受欢迎的奶牛

    题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...

  6. request.getScheme() 取到https正确的协议(转载)

    最近在做一个项目, 架构上使用了 Nginx +tomcat 集群, 且nginx下配置了SSL,tomcat no SSL,项目使用https协议 但是,明明是https url请求,发现 log里 ...

  7. 同步IO与同步非阻塞IO的理解

    本文图片均来自网络 一.同步IO---Blocking IO 在Blocking IO模型中,用户空间的应用程序执行一个系统调用(recvform),这会导致应用程序阻塞,直到数据准备好,并且将数据从 ...

  8. CentOS 6下搭建LAMP环境

    第一步,使用Xshell管理工具连接远程服务器 第二步,输入服务器账号密码登录远程服务器 如果centos内置的yum源可用的软件偏少或者版本过低,请更新! 首先备份/etc/yum.repos.d/ ...

  9. /etc/fstab 转

    一./etc/fstab文件的作用 磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载. 系统开机时会主动读取/etc/fstab这个文件中的内容 ...

  10. system.data.sqlite.dll

    记录下最新的system.data.sqlite.dll下载地址和官网:http://system.data.sqlite.org