POI读取Excel表格数据

* {所需相关jar下载:
* commons-collections4-4.4.jar
* commons-compress-1.19.jar
* poi-4.1.1.jar
* poi-ooxml-4.1.1.jar
* poi-ooxml-schemas-4.1.1.jar
* }
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
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; /**
* @author 马家立
* @version 创建时间:2019年11月15日下午5:56:37
* @Description:TODO 读取Excel相关类
* {所需相关jar:
* commons-collections4-4.4.jar
* commons-compress-1.19.jar
* poi-4.1.1.jar
* poi-ooxml-4.1.1.jar
* poi-ooxml-schemas-4.1.1.jar
* }
*/
public class ReadExcel {
/**
* @Title:getDataFromExcel
* @author:马家立
* @date:2019年11月19日 上午10:02:22
* @Description:TODO 根据Excel的地址读取Excel表格数据
* @param filePathExcel的绝对路径
* @return Map<String,Object> {end:ok或者error;msg:错误信息原因;counts:读取条数}
*/
public static Map<String, Object> getDataFromExcel(String filePath) {
// 声明结果map
Map<String, Object> resultMap = new HashMap<String, Object>();
// 判断是否为excel类型文件
if (!filePath.endsWith(".xls") && !filePath.endsWith(".xlsx")) {
System.out.println("文件不是excel类型");
resultMap.put("end", "error");
resultMap.put("msg", "文件不是excel类型");
return resultMap;
}
// 声明文本输入流
FileInputStream fis = null;
// 声明一个新的工作簿
Workbook wookbook = null;
// 声明一个新的工作表
Sheet sheet = null;
try {
// 获取一个绝对地址的流
fis = new FileInputStream(filePath);
// 2003版本的excel,用.xls结尾, 2007版本以.xlsx
if (filePath.endsWith(".xls")) {
wookbook = new HSSFWorkbook(fis);// 得到工作簿
} else {
// XSSFWorkbook
wookbook = new XSSFWorkbook(fis);// 得到工作簿
}
// 得到第一个工作表
sheet = wookbook.getSheetAt(0);
// 得到第二个工作表
// sheet = wookbook.getSheetAt(1);
// 得到第三个工作表
// sheet = wookbook.getSheetAt(2);
// 封装处理Excel工作子表的数据
resultMap = packageDataBySheet(sheet);
} catch (Exception e) {
e.printStackTrace();
}
return resultMap;
} /**
* @Title:packageDataBySheet
* @author:马家立
* @date:2019年11月19日 上午9:55:26
* @Description:TODO 封装处理Excel工作子表的数据
* @param sheetExcel工作簿中的子表
* @return Map<String,Object> {end:ok或者error;msg:错误信息原因;counts:读取条数}
*/
public static Map<String, Object> packageDataBySheet(Sheet sheet) {
// 返回结果map
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
resultMap.put("end", "ok");
// 获得表头
Row rowHead = sheet.getRow(0);
// 获取Excel的所有行数量
int rows = sheet.getLastRowNum();
// 获取Excel的所有列数量
int lines = rowHead.getPhysicalNumberOfCells();
if (0 == rows) {
System.out.println("Excel文件内没有数据!");
resultMap.put("end", "error");
resultMap.put("msg", "Excel文件内没有数据!");
return resultMap;
}
// 读取条数
int counts = 0;
// 是否跳过读取下一行
boolean isNext = false;
// 外圈循环读取所有行:获得所有行的数据
for (int i = 0; i <= rows; i++) {
// 是否跳过读取下一行:每次初始化为false
isNext = false;
counts++;
// 获得第i行对象
Row row = sheet.getRow(i);
// 获取单元格为空则直接下一行
if (isNullAndEmpty(row)) {
continue;
}
List<String> list = new ArrayList<>();
// 内圈循环读取所有列:遍历每一行的的数据,lineNum:列数
for (int j = 0; j < lines; j++) {
// 获取该单元格相应的类型的值
String str = getRightTypeCell(row.getCell(j), i, j);
// 如果第一列为空则直接读取下一行
if (isNullAndEmpty(str) && (0 == j)) {
isNext = true;
break;
}
list.add(str);
}
// 是否跳过读取下一行
if (isNext) {
continue;
}
String str1 = list.get(0); // 参数1
// String str2 = list.get(1); // 参数2
// String str3 = list.get(2); // 参数3
// and so on...
if (i == 0) {
if ("str1".endsWith(str1)) {
System.out.println("读取的排课Excel数据格式正确");
} else {
resultMap.put("end", "error");
resultMap.put("msg", "读取的排课Excel数据格式错误!");
System.err.println("读取的排课Excel数据格式错误");
break;
}
} else {
/**
* 处理数据
*/
} }
resultMap.put("counts", counts + "");
} catch (Exception e) {
e.printStackTrace();
resultMap.put("end", "error");
resultMap.put("msg", "OperationExcel的packageDataBySheet方法异常!");
}
return resultMap;
} /**
* @Title:getRightTypeCell
* @author:马家立
* @date:2019年11月18日 下午5:37:04
* @Description:TODO 返回该单元格相应的类型的值
* @param cell一个单元格的对象
* @param rowNum行数
* @param lineNum列数
* @return
* @throws Exception
* String
*/
public static String getRightTypeCell(Cell cell, int rowNum, int lineNum) throws Exception {
// 单元格内容
String value = "";
System.out.println("rowNum:" + rowNum + "\tlineNum:" + lineNum);
// 如果单元格为空或者单元格里面的数据为空则返回
if ((cell == null) || cell.equals(null) || (cell.getCellType() == CellType.BLANK)) {
value = "";
} else {
// 判断数据类型
switch (cell.getCellType()) {
case FORMULA:
value = "" + cell.getCellFormula();
break;
case NUMERIC:
value = "" + cell.getNumericCellValue();
break;
case STRING:
value = cell.getStringCellValue();
break;
default:
break;
}
}
return value;
} /**
* @Title:isNullAndEmpty
* @author:马家立
* @date:2019年11月19日 上午10:23:49
* @Description:TODO 校验对象是否为空
* @param obj校验对象
* @return boolean
*/
public static boolean isNullAndEmpty(Object obj) {
if ((null != obj) && !"".equals(obj.toString()) && !"null".equals(obj)) {
return false;
} else {
return true;
}
} public static void main(String[] args) throws Exception {
// 读取文件地址
String file_path = "D:\\123.xlsx";
// 传路径是为了方法灵活
Map<String, Object> map = getDataFromExcel(file_path);
String end = map.get("end") + "";
System.out.println("封装处理结果:" + end);
}
}

POI读取Excel数据的更多相关文章

  1. 使用poi读取excel数据示例

    使用poi读取excel数据示例 分两种情况: 一种读取指定单元格的值 另一种是读取整行的值 依赖包: <dependency> <groupId>org.apache.poi ...

  2. Java POI读取Excel数据,将数据写入到Excel表格

    1.准备 首先需要导入poi相应的jar包,包括: 下载地址:http://pan.baidu.com/s/1bpoxdz5 所需要的包的所在位置包括: 2.读取Excel数据代码 package S ...

  3. poi——读取excel数据

    单元格类型 读取Excel数据 package com.java.test.poi; import java.io.File; import java.io.FileInputStream; impo ...

  4. POI读取Excel数据保存到数据库,并反馈给用户处理信息(导入带模板的数据)

    今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户.于是想到了POI读取文件 ...

  5. java 使用POI读取excel数据

    原文:http://doc.okbase.net/0201zcr/archive/161440.html 一.定义 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Ja ...

  6. Java POI 读取Excel数据转换为XML格式

    1.首先要下载poi相关的包:http://poi.apache.org/  ,以下是所需的jar包 2.贴上详细的代码 public class ExcelToXml { /** * 将excel的 ...

  7. POI 读取Excel数据

    private List<LeagueGroup> read() throws IOException{ List<LeagueGroup> leagueGroups=new ...

  8. java的poi技术读取Excel数据到MySQL

    这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...

  9. jxl读写excel, poi读写excel,word, 读取Excel数据到MySQL

    这篇blog是介绍: 1. java中的poi技术读取Excel数据,然后保存到MySQL数据中. 2. jxl读写excel 你也可以在 : java的poi技术读取和导入Excel了解到写入Exc ...

随机推荐

  1. opc 带有session

    现在使用java来做工控系统的几种方式: 知识储备: 一.OPC Server端目前常见的有以下几种协议: 参考博客:https://www.cnblogs.com/ioufev/articles/9 ...

  2. 【并行计算-CUDA开发】 NVIDIA Jetson TX1

    概述 NVIDIA Jetson TX1是计算机视觉系统的SoM(system-on-module)解决方案.它组合了最新的NVIDIAMaxwell GPU架构,其具有ARM Cortex-A57 ...

  3. idea把maven依赖树输出到控制台

    第一步 选中红色方框 第二步 点进去 输入命令:mvn dependency:tree 如果要输出到文件,找到pom文件的位置 进入命令行 输入: mvn dependency:tree >d: ...

  4. (模板)求逆矩阵luoguP4783

    题目链接:https://www.luogu.org/problem/P4783 题意:求矩阵的逆. 思路:高斯消元法求矩阵的逆,n为400,卡常,我是开了O2优化才AC的.. AC代码: #incl ...

  5. java-监听器(Listener)

    监听器:用于监听web应用中某些对象.信息的创建.销毁等动作,服务器会自动调用相应的方法进行处理.常用于统计在线人数,初始化系统参数等. Javaweb监听器主要监听对象有ServletContext ...

  6. TCP的socket连接

    package newtest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre ...

  7. springboot集成mongoDB简易使用

    1.首先是添加Spring Data mongo的配置依赖 <dependency> <groupId>org.springframework.boot</groupId ...

  8. S03_CH01_AXI_DMA_LOOP 环路测试

    S03_CH01_AXI_DMA_LOOP 环路测试 1.1概述 本课程是本季课程里面最简单,也是后面DMA课程的基础,读者务必认真先阅读和学习. 本课程的设计原理分析. 本课程是设计一个最基本的DM ...

  9. USB协议基础知识

    ref : https://blog.csdn.net/u010142953/article/details/82627591 USB 基本知识  USB的重要关键概念:  1. 端点:位于USB设备 ...

  10. C# 使用Emit实现动态AOP框架 (二)

    目  录 C# 使用Emit实现动态AOP框架 (一) C# 使用Emit实现动态AOP框架 (二) C# 使用Emit实现动态AOP框架 (三) C# 使用Emit实现动态AOP框架 进阶篇之异常处 ...