Java利用POI读取Excel
官网直接下载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的更多相关文章
- java利用poi读取excel异常问题
最近一个web工程需要完成一个小功能,利用文件上传然后读取文件内容写入到数据库,这里是操作的excel文件,excel文件分两种后缀,03版本的xls和之后的xlsx,现在大家一般都拿非常好用的插件直 ...
- Java 利用poi读取excel
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.Inpu ...
- JAVA使用POI读取EXCEL文件的简单model
一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...
- 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中 ...
- java用poi读取Excel表格中的数据
Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版.Apache POI 代 ...
- java 利用POI 读取Execel数据的真实行数
java 利用poi 读execel文件的操作,读取总的数据行数一般是通过调用 sheet.getLastRowNum() ;可是这样有时候会出现一些问题,例如,当其中一行的数据的确都为空,可是其原本 ...
- Java实现POI读取Excel文件,兼容后缀名xls和xlsx
1.引入所需的jar包: maven管理项目的话直接添加以下坐标即可: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -- ...
- java 使用POI读取excel数据
原文:http://doc.okbase.net/0201zcr/archive/161440.html 一.定义 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Ja ...
- java通过poi读取excel中的日期类型数据或自定义类型日期
Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2019,而Excel中输入的是 2019/10/12 或 2019-10-12 poi处理excel时,当excel没 ...
随机推荐
- redis-LinkedList
1.redis-LinkedList[重点] Java List : 数组ArrayList 链表LinkedList 为什么redis选取了链表? Redis操作中,最多的操作是进行元素的增删 使 ...
- ubuntu14.04安装Anaconda
1 安装anaconda 为了安装python等各种依赖包,我安装了Anaconda工具包,在清华源下载了Anaconda的镜像 1.1 下载anaconda 如果用python2.7,就下载An ...
- Linux7系列阅读
1.[Centos7]hostnamectl 设置主机名 https://blog.csdn.net/dream361/article/details/56833248 2.ip addr https ...
- xadmin后台页面定制和添加服务器监控组件
xadmin定制 项目需要添加服务器监控页面,碍于xadmin不是很好自定义页面,之前写过插件,太麻烦了,还是直接改源码 原理其实很简单,因为xadmin的处理流程和django类似,都是通过拦截UR ...
- Node.js安装和简介
Node.js是基于Chrome的V8 JavaScript引擎构建的JavaScript运行平台.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.js 的包 ...
- Java的static类
首先Java的static类只能是静态内部类.如果在外部类声明为static,程序会编译通不过. 其次,主要了解下static内部类与普通内部类的区别是什么,以及static内部类的作用是什么,详见下 ...
- C++代码风格指南总结
C++代码风格指南 代码风格的重要性 今天我收到thougthwork笔试没过的消息, 心里确实很难受, 然后师兄说我代码写得很糟糕 细想一下, 我写代码确实是随心所欲, 并没有遵循什么规范; 所以现 ...
- Spring HibernateTemplate与HibernateDaoSupport对比
HibernateTemplate与HibernateDaoSupport两者都是spring整合hibernate提供的模板技术. 对于保存一个对象,HibernateTemplate需要先配置 配 ...
- Docker的离线安装
由于公司需要离线部署Docker,这里将其步骤记录下来. 目标环境Centos7.2. 由于目标环境为公司内网,首先尝试在https://download.docker.com/linux/cento ...
- MinGW GCC 7.2.0 2017年8月份出炉啦
GCC720-for-MSYS2.7z for x86 x64 63.72 MB 发布日期: 2017-08-14 下载地址: https://forum.videohelp.com/attachme ...