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没 ...
随机推荐
- Nginx系列4:用GoAccess实现可视化并实时监控access日志
1.ubuntu16.04安装GoAccess GoAccess下载地址:https://goaccess.io/download 安装步骤: $ wget https://tar.goaccess. ...
- openstack Q版部署-----虚拟机密码修改问题
一.修改镜像密码 1.打开一个要修改的镜像 随便找一台centos服务器 [root@linux-node1 ~]#wget http://cloud.centos.org/centos/7/imag ...
- 【ARTS】01_17_左耳听风-20190304~20190310
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- ARMV7-M数据手册---Part A :Application Level Architecture---A1 Introduction
1.前言 本章主要介绍了ARMV7体系结构及其定义的属性,以及本手册定义的ARMV7M属性. 主要包括: ARMV7体系结构和属性 ARMV7M属性 ARMV7M扩展 2. ARMV7体系结构和属性 ...
- 设计模式C++学习笔记之十六(Observer观察者模式)
16.1.解释 概念:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. main(), IObservable,被观察者接口 CHanFei ...
- 获取本地计算机名和IP地址
WSADATA wsadata; != WSAStartup(MAKEWORD(, ), &wsadata)) { AfxMessageBox("初始化网络环境失败!"); ...
- python去除字符串里的非数字
filter(lambda ch: ch in ‘0123456789.’, crazystring)
- 计算机中内存、cache和寄存器之间的关系及区别
1. 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中,包含的寄存 器有指令寄存器(IR)和程序计数器(PC).在中央处理器 ...
- linux 系统进程理解
1.为了对进程从产生到消亡的整个过程进行跟踪和描述,就需要定义各种进程的各种状态并制定相应的状态转换策略,以此来控制进程的运行. 不同的操作系统对进程的状态解释不同,但是最基本的状态都是一样 ...
- 在Centos7 上安装SVN
https://blog.csdn.net/crossangles_2017/article/details/78553266 1.安装 使用yum安装非常简单: yum install subver ...