java调用POI读取Excel
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;
XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx;
1.注意点
getPhysicalNumberOfRows()获取的是物理行数,也就是不包括那些空行(隔行)的情况(编号从1开始)。
getLastRowNum()获取的是最后一行的编号(编号从0开始)。
getPhysicalNumberOfCells 是获取不为空的列个数。
getLastCellNum 是获取最后一个不为空的列是第几个。 eg.
我使用getLastRowNum()获取行数,getLastCellNum获取列数:
Excel中 有12行,11列。
int rows = sheet.getLastRowNum(); //获取的是最后一行的编号(编号从0开始)
System.out.println("rows=="+rows); //rows==11
int cells = sheet.getRow(startrow).getLastCellNum();
System.out.println("cells=="+cells); //cells==11
------------------------------------------------------------------------------------------------------
CELL_TYPE_NUMERIC 数值型 0
CELL_TYPE_STRING 字符串型 1
CELL_TYPE_FORMULA 公式型 2
CELL_TYPE_BLANK 空值 3
CELL_TYPE_BOOLEAN 布尔型 4
CELL_TYPE_ERROR 错误 5
2.HSSFWorkbook的关键代码
/**
* 读取后缀名为xls的Excel
*/
public static List<Map<String,String>> readExcel2003(String filename) throws FileNotFoundException, IOException{
int startrow = 0; //第一行开始读取 List<String> columnNameList = new ArrayList<String>();
List<Map<String,String>> list = new ArrayList<Map<String,String>>(); HSSFWorkbook wookbook = new HSSFWorkbook(new FileInputStream(new File(filename)));
HSSFSheet sheet = wookbook.getSheetAt(0);
int rows = sheet.getLastRowNum(); //获取的是最后一行的编号(编号从0开始)
System.out.println("rows=="+rows);
int cells = sheet.getRow(startrow).getLastCellNum();
System.out.println("cells=="+cells);
for (int i=0; i < (rows+1); i++) { //获取的是最后一行的编号(编号从0开始)。所以rows+1
HSSFRow row = sheet.getRow(i);
if (row != null) {
if (i==startrow) { //获取名称
for (int j=0; j<cells; j++) {
HSSFCell cell = row.getCell(j);
if (cell != null && !cell.getStringCellValue().equals("")) {
columnNameList.add(cell.getStringCellValue());
System.out.println(j + ":" + cell.getStringCellValue());
}else {
cells=j; //cells为size所以从1开始
break;
}
}
}
else {
Map<String, String> map = new HashMap<String, String>();
for (int j = 0; j < cells; j++) {
HSSFCell cell = row.getCell(j);
if (cell != null) {
map.put(columnNameList.get(j), cell.getStringCellValue());
}else{
map.put(columnNameList.get(j), null);
}
}
list.add(map);
}
}
}
return list;
}
3.XSSFWorkbook的关键代码
/**
* 读取后缀名为xlsx的Excel
*/
public static List<Map<String,String>> readExcel2007(String filename) throws FileNotFoundException, IOException{
int startrow = 0; //第一行开始读取 List<String> columnNameList = new ArrayList<String>();
List<Map<String,String>> list = new ArrayList<Map<String,String>>(); XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File(filename)));
XSSFSheet sheet = workbook.getSheetAt(0);
int rows = sheet.getLastRowNum();
// System.out.println("rows:"+ rows);
int cells = sheet.getRow(startrow).getLastCellNum();
for (int i=0; i < (rows+1); i++) { //获取的是最后一行的编号(编号从0开始)。所以rows+1
XSSFRow row = sheet.getRow(i);
if (row != null) {
if(i == startrow) { //获取名称
for (int j=0; j<cells; j++) {
XSSFCell cell = row.getCell(j);
if (cell != null && !cell.getStringCellValue().equals("")) {
columnNameList.add(cell.getStringCellValue());
}else {
cells=j; //cells为size所以从1开始
break;
}
}
}else {
Map<String, String> map = new HashMap<String, String>();
for (int j = 0; j < cells; j++) {
XSSFCell cell = row.getCell(j);
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA:
case HSSFCell.CELL_TYPE_NUMERIC:
boolean flag = HSSFDateUtil.isCellDateFormatted(cell);
if(flag){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date date = cell.getDateCellValue();
String result = sdf.format(date);
map.put(columnNameList.get(j), result);
}else{
String str = String.valueOf(cell.getNumericCellValue());
str = str.substring(0, str.length()-2);
map.put(columnNameList.get(j), str);
}
break;
case HSSFCell.CELL_TYPE_STRING:
map.put(columnNameList.get(j), cell.getStringCellValue());
break;
default:
map.put(columnNameList.get(j), null);
break;
}
}else {
map.put(columnNameList.get(j), null);
}
}
list.add(map);
}
}
}
return list;
}
4.相关jar下载
java调用POI读取Excel的更多相关文章
- 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读取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没 ...
- Java利用POI读取Excel
官网直接下载POI http://poi.apache.org/ package com.CommonUtil; import java.io.File; import java.io.FileIn ...
- java使用POI读取excel报表
留此作为记录 package com.demo; import java.io.FileInputStream; import java.util.Iterator; import org.apach ...
- java利用poi读取excel异常问题
最近一个web工程需要完成一个小功能,利用文件上传然后读取文件内容写入到数据库,这里是操作的excel文件,excel文件分两种后缀,03版本的xls和之后的xlsx,现在大家一般都拿非常好用的插件直 ...
随机推荐
- create a backdoor deb package
以下介绍怎样制作包括后门的deb安装包.以tree为例进行说明.利用apt-get下载安装包.--download-only表示仅仅下载不做其它处理. root@deb:~#apt-get downl ...
- 递归计算战士打靶S次打了N环一共同拥有多少种可能的问题
问题描写叙述 一个战士打了10次靶.一共打了90环,问一共同拥有多少种可能,并输出这些可能的组合. 思路 首先.嵌套10层循环进行穷举是不可取的,一是由于速度太慢,二是假设改成打20次靶就完蛋了. 事 ...
- PHP开发环境简析
单工作机情况 windows + wamp windows + XShell类终端工具 + linux虚拟机 Ubuntu桌面版 自带终端 Mac OS + mamp Mac OS 自带终端 Mac ...
- Canvas学习笔记——缓动
当你驾车在高速公路上行驶时,速度是很快的,而快到收费站时,则开始减速直到停下.将这个例子转换成物理模型就是当物体向终点运动时,开始速度会很快,而在快要到达终点时,速度会逐渐放缓直至0,整个运动过程就是 ...
- 话题讨论&征文--谈论大数据时我们在谈什么 获奖名单发布
从社会发展趋势的角度,非常明显大数据会是眼下肉眼可及的视野范围里能看到的最大趋势之中的一个.从传统IT 业到互联网.互联网到移动互联网,从以智能手机和Pad 为主要终端载体的移动互联网到可穿戴设备的移 ...
- 虚拟机和主机ping不通,SQL Server无法远程连接的解决方法
一.虚拟机网络的配置 这里只列一下自己的配置: 1.编辑---虚拟网络编辑器 进行设置 2.设置对应系统 3.还是Ping不通,最后关闭 虚机内的Windows防火墙,可以Ping通,看来Net模式下 ...
- 用EasyDarwin进行IPTV rtsp mpeg-ts smil流的转发和分发直播服务
对RTSP/RTP的转发和分发一直都是EasyDarwin的基础功能,尤其是在安防行业中,EasyDarwin非常贴合安防监控的需求,但一直未尝试用EasyDarwin进行IPTV的RTSP流进行转发 ...
- Hibernate中的事务处理流程详解
一.Hibernate操作的基本流程 使用 Hibernate 进行数据持久化操作,通常有如下步骤: 1.编写持久化类: POJO + 映射文件 2.获取 Configuration 对象 3.获取 ...
- ORACLE函数之单行转换函数
1 ASCIISTR 格式:ASCIISTR(C) 说明:将字符串C转换为ASCII字符串,即将C中的ASCII字符保留不变,但非ASCII字符则以ASCII表示返回 举例: ...
- Web UI回归测试 -- BackstopJS 入门
BackstopJS是一个测试工具,用于测试ui图和实际项目是否偏差. 话不多说,直接启动一个项目吧测试吧. 1.首先全局安装BackstopJS npm install -g backstopjs ...