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没 ...
随机推荐
- SpringBoot+BootStrap多文件上传到本地
1.application.yml文件配置 # 文件大小 MB必须大写 # maxFileSize 是单个文件大小 # maxRequestSize是设置总上传的数据大小 spring: servle ...
- CF1099F Cookies
题目地址:CF1099F Cookies 树形dp套树形数据结构 对每个节点 \(i\) ,分两步进行: 1.令 \(f_i\) 为Mitya在节点 \(i\) 停止游戏最多可以吃到多少块饼干 我们可 ...
- XE7/X10.2 Datasnap使用 dbExpress 连接MySQL数据库
本人使用:DELPHI X10.2.2 版本连接 MYSQL 5.1 (安装 mysql-5.1.72-win32.msi)的32位版本,开始连接不了: 将 MYSQL 5.1 安装目录下bin 中的 ...
- Python运维开发基础10-函数基础【转】
一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...
- python下载夏目友人帳
python下载夏目友人帐 一般情况下我们使用爬虫更多的应该是爬数据或者图片吧,今天在这里和大家分享一下关于使用爬虫技术来进行视频下载的方法,不仅可以方便的下载一些体积小的视频,针对大容量的视频下载同 ...
- VC里判断系统是不是64bit
不过,理论上来说,也可以用一个int的大小作为参考,判断是32位还是64位.sizeof(int) == 4 //32位系统.sizeof(int) == 8 //64位系统. 也可以使用函数如下: ...
- 使用位图字体工具BMFont从图片生成自定义字体
转载自:http://blog.csdn.net/keshuiyun/article/details/9960667 BMFont下载地址: http://www.angelcode.com/prod ...
- Ionic-轮播图ion-slide-box
官方用法介绍:http://www.ionic.wang/js_doc-index-id-44.html 用法 <ion-slide-box> <ion-slide> < ...
- python pip下载速度慢的解决方法
pip是python内置的非常好用的下载工具,基本可以下载全部的python库.它还有一个非常好的特点,当你安装一个库的时候,它会自动帮你安装所有这个库的依赖库.完全一键式操作.非常方便.但是由于pi ...
- python 前面几个单词含义
切片 str[start:end:step] start:从xxx开始 (startswith) end:切到xxx为止 (endswith) 不包括 字符串操作 .capitalize()# ...