第一步:写入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. linux常用解压命令总结

    .xz 解压: tar xvf FileName.tar.xz 打包: tar cvf FileName.tar DirName .tar 解包:tar xvf FileName.tar 打包:tar ...

  2. Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果

    Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果 使用忍者飞镖创建粒子效果 游戏中,诸如烟.火.水滴.落叶等粒子效果,都可以使用粒子系统(particle system)来实现.例如,<明 ...

  3. GPFS 安装测试

    简介 GPFS(General Parallel File System ,GPFS) 是 IBM 公司第一个共享文件系统,起源于 IBM SP 系统上使用的虚拟共享磁盘技术( VSD ).作为这项技 ...

  4. django 编码错误

    估计这个问题是2.7的问题3.0好像就统一utf编码了 报错代码: python :ascii codec can't decode byte 0xe8 in posi 当django中报这个错误的时 ...

  5. FastReport.Net使用:[32]对话框使用2

    方法/步骤 1.先浏览下数据,成绩表中有部分科目成绩没有,如果是这种情况,报表是不能打印的. 2.添加一个对话框,将其Visible属性设置为False,默认情况下改对话框是不显示的. 将确定按钮的D ...

  6. Hibernate.cfg.xml详解

    在搭建Hibernate环境时需要配置Hibernate.cfg.xml配置文件,本文将想详细讲解配置文件的内容. 1.数据库连接信息 配置数据库驱动.(其中name为连接方式,我在这写jdbc的连接 ...

  7. 【BZOJ 2440】 2440: [中山市选2011]完全平方数 (二分+容斥原理+莫比乌斯函数)

    2440: [中山市选2011]完全平方数 Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数 ...

  8. Linux 自动化部署

    1.pexpect Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Py ...

  9. vagrant 常用命令以及常用操作

    列出这些命令,主要是防止脑内存不足.目前这些命令是我常用的,以后其他命令用的多,我再继续添加... 分享些本人用的百度网盘box,国外的太坑... 本人分享的百度网盘:http://pan.baidu ...

  10. 高斯消元法求解异或方程组: cojs.tk 539.//BZOJ 1770 牛棚的灯

    高斯消元求解异或方程组: 比较不错的一篇文章:http://blog.sina.com.cn/s/blog_51cea4040100g7hl.html cojs.tk  539. 牛棚的灯 ★★☆   ...