官网直接下载POI  http://poi.apache.org/

 package com.CommonUtil;

 import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
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.XSSFFormulaEvaluator;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; /**
* excel文件读取工具类,支持xls,xlsx两种格式
* @author Andrew
*
*/
public class ExcelUtil { /**
* excel文件读取指定列的数据
* @author Andrew
* @param excelPath 文件名
* @param args 需要查询的列号
* @return ArrayList<ArrayList<String>> 二维字符串数组
* @throws IOException
*/
@SuppressWarnings({ "unused" })
public ArrayList<ArrayList<String>> excelReader(String excelPath,int ... args) throws IOException {
// 创建excel工作簿对象
Workbook workbook = null;
FormulaEvaluator formulaEvaluator = null;
// 读取目标文件
File excelFile = new File(excelPath);
InputStream is = new FileInputStream(excelFile);
// 判断文件是xlsx还是xls
if (excelFile.getName().endsWith("xlsx")) {
workbook = new XSSFWorkbook(is);
formulaEvaluator = new XSSFFormulaEvaluator((XSSFWorkbook) workbook);
}else {
workbook = new HSSFWorkbook(is);
formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);
} //判断excel文件打开是否正确
if(workbook == null){
System.err.println("未读取到内容,请检查路径!");
return null;
}
//创建二维数组,储存excel行列数据
ArrayList<ArrayList<String>> als = new ArrayList<ArrayList<String>>();
//遍历工作簿中的sheet
for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
Sheet sheet = workbook.getSheetAt(numSheet);
//当前sheet页面为空,继续遍历
if (sheet == null) {
continue;
}
// 对于每个sheet,读取其中的每一行
for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
Row row = sheet.getRow(rowNum);
if (row == null) {
continue;
}
ArrayList<String> al = new ArrayList<String>();
// 遍历每一行的每一列
for(int columnNum = 0 ; columnNum < args.length ; columnNum++){
Cell cell = row.getCell(args[columnNum]);
al.add(getValue(cell, formulaEvaluator));
}
als.add(al);
}
}
is.close();
return als;
} /**
* excel文件读取全部信息
* @author Andrew
* @param excelPath 文件名
* @return ArrayList<ArrayList<String>> 二维字符串数组
* @throws IOException
*/
@SuppressWarnings({ "unused" })
public ArrayList<ArrayList<String>> excelReader(String excelPath) throws IOException {
// 创建excel工作簿对象
Workbook workbook = null;
FormulaEvaluator formulaEvaluator = null;
// 读取目标文件
File excelFile = new File(excelPath);
InputStream is = new FileInputStream(excelFile);
// 判断文件是xlsx还是xls
if (excelFile.getName().endsWith("xlsx")) {
workbook = new XSSFWorkbook(is);
formulaEvaluator = new XSSFFormulaEvaluator((XSSFWorkbook) workbook);
}else {
workbook = new HSSFWorkbook(is);
formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);
} //判断excel文件打开是否正确
if(workbook == null){
System.err.println("未读取到内容,请检查路径!");
return null;
}
//创建二维数组,储存excel行列数据
ArrayList<ArrayList<String>> als = new ArrayList<ArrayList<String>>();
//遍历工作簿中的sheet
for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
Sheet sheet = workbook.getSheetAt(numSheet);
//当前sheet页面为空,继续遍历
if (sheet == null) {
continue;
}
// 对于每个sheet,读取其中的每一行
for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
Row row = sheet.getRow(rowNum);
if (row == null) {
continue;
}
// 遍历每一行的每一列
ArrayList<String> al = new ArrayList<String>();
for(int columnNum = 0 ; columnNum < row.getLastCellNum(); columnNum++){
Cell cell = row.getCell(columnNum);
al.add(getValue(cell, formulaEvaluator));
}
als.add(al);
}
}
is.close();
return als;
} /**
* excel文件的数据读取,包括后缀为xls,xlsx
* @param xssfRow
* @return
*/
@SuppressWarnings("deprecation")
private static String getValue(Cell cell, FormulaEvaluator formulaEvaluator) {
if(cell==null){
return null;
}
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
return cell.getRichStringCellValue().getString();
case Cell.CELL_TYPE_NUMERIC:
// 判断是日期时间类型还是数值类型
if (DateUtil.isCellDateFormatted(cell)) {
short format = cell.getCellStyle().getDataFormat();
SimpleDateFormat sdf = null;
/* 所有日期格式都可以通过getDataFormat()值来判断
* yyyy-MM-dd----- 14
* yyyy年m月d日----- 31
* yyyy年m月--------57
* m月d日 --------- 58
* HH:mm---------- 20
* h时mm分 --------- 32
*/
if(format == 14 || format == 31 || format == 57 || format == 58){
//日期
sdf = new SimpleDateFormat("yyyy-MM-dd");
}else if (format == 20 || format == 32) {
//时间
sdf = new SimpleDateFormat("HH:mm");
}
return sdf.format(cell.getDateCellValue());
} else {
// 对整数进行判断处理
double cur = cell.getNumericCellValue();
long longVal = Math.round(cur);
Object inputValue = null;
if(Double.parseDouble(longVal + ".0") == cur) {
inputValue = longVal;
}
else {
inputValue = cur;
}
return String.valueOf(inputValue);
}
case Cell.CELL_TYPE_BOOLEAN:
return String.valueOf(cell.getBooleanCellValue());
case Cell.CELL_TYPE_FORMULA:
//对公式进行处理,返回公式计算后的值,使用cell.getCellFormula()只会返回公式
return String.valueOf(formulaEvaluator.evaluate(cell).getNumberValue());
//Cell.CELL_TYPE_BLANK || Cell.CELL_TYPE_ERROR
default:
return null;
}
}
}

Java利用POI读取Excel的更多相关文章

  1. java利用poi读取excel异常问题

    最近一个web工程需要完成一个小功能,利用文件上传然后读取文件内容写入到数据库,这里是操作的excel文件,excel文件分两种后缀,03版本的xls和之后的xlsx,现在大家一般都拿非常好用的插件直 ...

  2. Java 利用poi读取excel

    import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.Inpu ...

  3. JAVA使用POI读取EXCEL文件的简单model

    一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...

  4. Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决

    Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决 引言: 在Java中 ...

  5. java用poi读取Excel表格中的数据

    Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版.Apache POI 代 ...

  6. java 利用POI 读取Execel数据的真实行数

    java 利用poi 读execel文件的操作,读取总的数据行数一般是通过调用 sheet.getLastRowNum() ;可是这样有时候会出现一些问题,例如,当其中一行的数据的确都为空,可是其原本 ...

  7. Java实现POI读取Excel文件,兼容后缀名xls和xlsx

    1.引入所需的jar包: maven管理项目的话直接添加以下坐标即可: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -- ...

  8. java 使用POI读取excel数据

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

  9. java通过poi读取excel中的日期类型数据或自定义类型日期

    Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 或 2019-10-12 poi处理excel时,当excel没 ...

随机推荐

  1. python读取两个文件并且判断是否一致

    ''' 判断两个文件是否相同,如果不同请指出第几行不相同 ''' def f1vsf2(name1,name2): f1 = open(name1) f2 = open(name2) count = ...

  2. ASP.NET Core中使用Unity5

    ⒈添加相关依赖 Install-Package Unity Install-Package Unity.RegistrationByConvention ⒉扫描项目接口实现类 using System ...

  3. Linux安装JDK(tar)

    我以JDK1.8为例 ⒈下载 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...

  4. [Docker]Docker拉取,上传镜像到Harbor仓库

    需求 因为项目的需求,需要制作一个基于tomcat的镜像.那么前提就是,需要有tomcat的基础镜像. 怎么做 我的思路跑偏了,本来以为是需要将tomcat下载下来,然后通过docker命令,让它成为 ...

  5. ubuntu server命令行搭建虚拟专用网

    问题: 在做一个国外的开源项目,需要用到很多 ubuntu 上特定版本的应用,由于国内墙的问题,导致Ubuntu 14.04在需要添加一些国外的库的时候(add-apt-repository ppa: ...

  6. vim块编辑删除、插入、替换【转】

    删除列 1.光标定位到要操作的地方. 2.CTRL+v 进入“可视 块”模式,选取这一列操作多少行. 3.d 删除.   插入列 插入操作的话知识稍有区别.例如我们在每一行前都插入"() & ...

  7. 用户 'IIS APPPOOL\xxxx' 登录失败

    一.现象发布到iis后,网站出现以下提示异常详细信息: System.Data.SqlClient.SqlException: 用户 'IIS APPPOOL\IdealTest' 登录失败. 二.分 ...

  8. .net 项目与网站区别

    背景 .net 的又一个杰作,我作为资深开发人员,好久没搞明白两者关系,后来慢慢总算琢磨明白了.在2003和2005的时候,都是用的网站方式,后来见到某同事用的项目方式,当时还很不理解,真是个傻瓜程序 ...

  9. <杂记>Android Studio 3.0-3.1 汉化包 (转载)

    JetBrains 系列软件汉化包 关键字: Android Studio 3.0-3.1 汉化包 CLion 2018.1 汉化包 GoLand 2017.3.2-2018.1 汉化包 Intell ...

  10. vue2.x + vux采坑总结(一)

    1.<tab-bar> 切换时,iocn高亮跟着切换问题 vux的Tabbar组件是用来实现底部tab栏,详情见官网文档 , 实现实例截图: 代码如下,控制高亮的是代码凸显部分:selec ...