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读取excel所需jar包

java调用POI读取Excel的更多相关文章

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

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

  2. 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中 ...

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

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

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

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

  5. java 使用POI读取excel数据

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

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

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

  7. Java利用POI读取Excel

    官网直接下载POI  http://poi.apache.org/ package com.CommonUtil; import java.io.File; import java.io.FileIn ...

  8. java使用POI读取excel报表

    留此作为记录 package com.demo; import java.io.FileInputStream; import java.util.Iterator; import org.apach ...

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

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

随机推荐

  1. Jenkins系列之-—06 Ant构建

    一.Ant 简介&构建环境 Apache Ant 是由 Java 语言开发的工具 构建ant环境: 1). 安装jdk,设置JAVA_HOME ,PATH ,CLASS_PATH 2). 下载 ...

  2. Controller//控制器

    #include<opencv2\core\core.hpp> #include<opencv2\imgproc\imgproc.hpp> #include<opencv ...

  3. 2.Qt Creator的使用

    下面以一个简单的程序来说明Qt Creator的使用: 首先,按图片步骤创建一个Qt项目 创建完成后 上图标记处工具栏提供了简化树形视图.分栏等功能(自行尝试吧...) 在使用Qt制作一个界面时,我们 ...

  4. 官方Caffe-windows 配置与示例运行

    http://blog.csdn.net/guoyk1990/article/details/52909864 标签: caffewindows配置训练自己的数据 2016-10-24 13:34 1 ...

  5. Spring Boot + Spring Data JPA + PostgreSQL

    最近在用Java重写之前实习生用.netcore写的微信后台应用. 规定用Spring Boot框架,PostgreSQL数据库.之前一直习惯于基于XML的Spring app,也没用过Postgre ...

  6. linux的su和sudo(转载)

    来源:http://www.jb51.net/LINUXjishu/12713.html 一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比 ...

  7. 关于TIME_WAIT状态

    前言 为何TCP ”四次分手“ 的过程中会有一个TIME_WAIT状态?这个状态有什么意义呢?这是网络中的一个经典问题,本文将给出精简的回答. 什么是TIME_WAIT状态 这是TCP通信协议中出现的 ...

  8. android:PopupWindow的使用场景和注意事项

    1.PopupWindow的特点 借用Google官方的说法: "A popup window that can be used to display an arbitrary view. ...

  9. 【BZOJ4407】于神之怒加强版 莫比乌斯反演

    [BZOJ4407]于神之怒加强版 Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行, ...

  10. NOTE:rfc5766-turn-server

    NOTE:This project is active in Google code: http://code.google.com/p/rfc5766-turn-server/ 启动方法:./tur ...